// a.c #include <stdio.h> int a = 10;在源文件 b.c 中使用这个全局变量:
// b.c #include <stdio.h> extern int a; // 声明变量 a 已在其他源文件中定义 int main() { printf("a = %d\n", a); return 0; }注意到在 b.c 中使用了 extern 关键字声明了变量 a,告诉编译器这个变量已经在其他源文件中定义过了。然后我们就可以在 main 函数中使用变量 a 了。当编译 b.c 文件时,编译器会查找其他源文件中是否有定义变量 a,如果找到了就会将其引入。
// a.c #include <stdio.h> int a = 10;在源文件 b.c 中使用这个全局变量,但没有在 a.c 中定义:
// b.c #include <stdio.h> extern int a; // 声明变量 a 已在其他源文件中定义 int main() { printf("a = %d\n", a); return 0; }如果我们直接编译 b.c 文件,则会出现链接时找不到符号 a 的错误:
$ gcc b.c -o b
/tmp/ccOXYGcX.o: In function `main':
b.c:(.text+0xa): undefined reference to `a'
collect2: error: ld returned 1 exit status
本文链接:http://task.lmcjl.com/news/7249.html