2016-05-29 5 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

なぜあなたは#cファイルを#includeしていますか? – immibis

+0

私は一般に.hファイルを#includeするべきであることを知っていますが、.cファイルを#includeすることもできます。それに問題はない。 –

答えて

0

demo_f1.cをdriver.cに3回直接的に、demo_f2.cとdemo_f3.cを介して間接的に2回含めます。結果として、コンパイラは "int x = 2;"という行の3倍を見つけます。

ヘッダーファイルで通常使用される#ifndefを使用して、このメカニズムを使用できます。このようdemo_f1.c行います.cファイルを含めないようにする代わりに

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

を、あなたが持っている可能性があり:

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が含まれます。

関連する問題