объявив переменную в одном файле и используя ее в другом - PullRequest
0 голосов
/ 25 ноября 2010

Я сделал 2 файла, которые отличаются от программы выше один - temp1.h, а другой - temp2.c, чтобы понять, как используется extern. Так вот, temp1.h

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

и temp2.c равно

#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);
}

и когда я собираю их как cc -I ./ temp2.c тогда я получу

/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

Я объявил jk в temp1.h как extern int, так почему я не могу инициализировать его в temp2.c?

Ответы [ 3 ]

2 голосов
/ 25 ноября 2010
int jk;

Указанная выше декларация должна быть сделана где-то в коде.Кроме того, jk должно быть глобальным.

2 голосов
/ 25 ноября 2010

Нет объектного файла, с которым вы связались, не объявил его extern, поэтому определения нет.

1 голос
/ 25 ноября 2010

вместо #include

заменить на #include "temp1.h"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...