2010-11-25 6 views
0
verwenden

Ich habe 2 Dateien erstellt, die sich von dem obigen Programm unterscheiden man ist temp1.h und ein anderer ist temp2.c zu verstehen, wie extern verwendet wird. So, hier ist temp1.heine Variable in einer Datei deklarieren und in einem anderen

#include<stdlib.h> 
typedef struct node * bond; 
extern int jk; 

und temp2.c ist

#include<stdio.h> 
#include<temp1.h> 
struct node { 
int data; 
}; 
int main() 
{ 
bond t1; 
t1=(bond)malloc(sizeof(bond)); 
t1->data=23; 
printf("the data is %d\n",t1->data); 
jk=0; 
printf("The variable jk = %d\n",jk); 
} 

und wenn ich diese als kompilieren cc -I ./ temp2.c dann bekomme ich

/tmp/ccdeJCat.o: In function `main': 
temp2.c:(.text+0x3c): undefined reference to `jk' 
temp2.c:(.text+0x46): undefined reference to `jk' 
collect2: ld returned 1 exit status 

Ich hatte jk in temp1 erklärt .h als extern int also warum kann ich es nicht in temp2.c initialisieren?

+2

Dies ist im Grunde die gleiche Frage wie die [vorherige] (http://stackoverflow.com/questions/4274190/warning-in-extern-declaration). Wenn Sie etwas klären müssen, bearbeiten Sie die Frage bitte. –

+0

+1 zu Matthew Flaschen, Warum kann die vorherige Frage nicht bearbeitet werden? – Jay

+0

Siehe [SO 1433204] (http://stackoverflow.com/questions/1433204/what-are-extern-variables-in-c) für eine Erklärung, wie globale Variablen in C definiert und verwendet werden. –

Antwort

2
int jk; 

Die obige Erklärung ist im Code irgendwo gemacht werden. Außerdem muss jk global sein.

2

Es gibt keine Objektdatei, mit der Sie verknüpft haben nicht haben Sie es extern deklariert, so gibt es keine Definition.

1

statt #include < temp1.h>

ersetzen mit #include "temp1.h"

+0

Die spitzen Klammern sind für Dateien in einer bestimmten Hierarchie des Systems (normalerweise System-Header). Die angegebenen Dateinamen sind relativ zum aktuellen Verzeichnis. – UncleO

Verwandte Themen