2016-05-29 60 views
0

我試圖在文件demo_f1.c中聲明變量x,並將它用於分別具有void f2()void f3()兩個函數的兩個文件demo_f2.cdemo_f3.c如何在多個交互C文件之間使用共享變量?

我有一個驅動程序,使用變量x和這兩個函數,但它給了我一個錯誤,當我嘗試編譯驅動程序。

demo_f1.c

int x=2; 

demo_f2.c

#include"C:\TC\BIN\demo_f1.C" 

void f2() 

{ 

    extern int x; 

    printf("In f2 x:%d\n",x); 

} 

demo_f3.c

#include"C:\TC\BIN\demo_f1.C" 

void f3() 

{ 

    extern int x; 

    printf("In f3 x:%d\n",x); 

} 

Driver.c

#include"stdio.h" 
#include"conio.h" 
#include"C:\TC\BIN\demo_f1.C" 
#include"C:\TC\BIN\demo_f2.C" 
#include"C:\TC\BIN\demo_f3.C" 
void main() 

{ 

    clrscr(); 

    printf("In main program,x:%d\n",x); 

    f2(); 

    f3(); 

    getch(); 

} 

錯誤:

Compiling C\TC\BIN\Driver.C: 
Error C\TC\BIN\DEMO_F1.C 1: Variable 'x' is initialized more than once 
Error C\TC\BIN\DEMO_F1.C 1: Variable 'x' is initialized more than once 

爲什麼會出現這個錯誤?我該如何糾正它?

+1

你爲什麼#include一個.c文件? – immibis

+0

immibis我知道我應該#include一個.h文件一般,但#includeing一個.c文件也可以。沒有問題。 –

回答

0

您在driver.c中包含三次demo_f1.c,一次直接,兩次間接通過demo_f2.c和demo_f3.c。結果,編譯器找到三行「int x = 2;」

您可以使用通常用於頭文件中的#ifndef的機制。讓demo_f1.c這樣的:

#ifndef DEMO_F1_C 
#define DEMO_F1_C 
int x=2; 
#endif 

或者,以避免包括.c文件,你可以有:

demo_f1.h

#ifndef DEMO_F1_H 
#define DEMO_F1_H 
extern int x; 
#endif 

demo_f1.c

#include "demo_f1.h" 
int x = 2; 

其他文件將包括demo_f1.h。