2016-05-29 26 views
0

Ich versuche, eine Variable x in einer Datei demo_f1.c und verwenden Sie es in zwei Dateien demo_f2.c und demo_f3.c mit zwei Funktionen void f2() und void f3() jeweils zu erklären.Wie verwende ich eine gemeinsame Variable zwischen mehreren interagierenden C-Dateien?

Ich habe ein Treiberprogramm, das die Variable x und beide dieser Funktionen verwendet, aber es gibt mir einen Fehler, während ich versuche, das Treiberprogramm zu kompilieren.

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(); 

} 

Der Fehler:

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 

Warum erhalte ich diesen Fehler? Wie kann ich das korrigieren?

+1

Warum enthalten Sie # eine .c-Datei? – immibis

+0

immibis Ich weiß, dass ich eine .h-Datei im Allgemeinen enthalten sollte, aber # included eine .c-Datei funktioniert auch. Kein Problem damit. –

Antwort

0

Sie fügen demo_f1.c dreimal in driver.c ein, eine direkt und zwei indirekt über demo_f2.c und demo_f3.c. Folglich findet der Compiler dreimal die Zeile "int x = 2;"

Sie können den Mechanismus mit #ifndef verwenden, der normalerweise in Headerdateien verwendet wird. Machen demo_f1.c wie folgt aus:

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

Alternativ zu vermeiden, dass die C-Datei einschließlich, könnten Sie haben:

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; 

Und die anderen Dateien würden demo_f1.h enthalten.