我读到,如果我想在另一个 C 文件中使用全局变量,我应该在数据类型前面加上访问说明符 extern,如下所示:
File One File Two
int x, y; extern int x, y;
char ch; extern char ch;
int main(void) void func22(void)
{ {
/* ... */ x = y / 10;
} }
void func1(void) void func23(void)
{ {
x = 123; y = 10;
} }
并且错误地在文件二中我没有按原样声明 x, y。我将它们声明为 int x
和int y
我等待编译器显示变量 x 和 y 重新定义的错误,但代码运行时没有任何错误。
例如:
文件一
#include <stdio.h>
int global = 1000; /** declare global variable called
global **/
int main(){
print();
return 0;
}
文件二
int global; /** here I don't use the extern keyword **/
void print(void){
global = 100;
printf("\n global = %d",global);
return;
}
结果是:global = 100
程序编译和链接没有任何错误
所以我的问题是:是 extern
说明符在这里是多余的?!
最佳答案
您不会收到任何错误,因为编译器不会检查外部变量的类型或是否存在。
在链接阶段,链接器在目标文件中搜索对名为 x
(或 y
)的符号的引用。
关于我可以在另一个文件中使用 "int"而不是 "extern"int 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18944617/