我制作了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
我在temp1.h中将jk声明为extern int,为什么我不能在temp2.c中初始化它?
答案 0 :(得分:2)
没有链接的对象文件没有将其声明为extern
,因此没有定义。
答案 1 :(得分:2)
int jk;
上述声明必须在代码中的某处进行。此外,jk
必须是全球性的。
答案 2 :(得分:1)
而不是#include&lt; temp1.h&gt;
替换为#include“temp1.h”