C - 为全局变量显式编写 extern 关键字
C - Writing extern keyword explicitly for global variable
我下面有 2 个 C
文件。根据我的阅读,我知道全局变量的默认存储 class 是外部的。如果我明确输入它,我会收到未定义的变量错误。我在这里错过了什么?这是否意味着当我省略 extern 关键字时它变成了一个定义但是当我输入它时它只是一个声明?
file1.c
#include <stdio.h>
#include <stdlib.h>
extern void file2function();
int variable; // if i put extern i will get error, isnt it implicitly extern?
int main()
{
variable = 1;
printf("file1 %d\n",variable);
file2function();
return 0;
}
file2.c
#include <stdio.h>
#include <stdlib.h>
extern int variable;
void file2function(){
variable = 2;
printf("file2 %d\n",variable);
return;
}
You need to take a look at the difference between a definition and a declaration
就是说,带有 extern
存储的变量声明是对编译器的提示,该对象在其他地方(或翻译单元)定义。它本身并不是一个定义。
您需要在用于生成二进制文件的翻译单元之一中进行定义。
在您的情况下,如果您在两个文件中都放入 extern
,则 int variable
成为两种情况下的声明。这就是为什么在链接阶段,编译器无法找到 promised 的 definition,所以它会尖叫。
另一方面,如果您从一个(仅一个)文件中删除 extern
,在该文件中,int variable;
是definition 另一个翻译单元参考了这个定义,so, all good.
我下面有 2 个 C
文件。根据我的阅读,我知道全局变量的默认存储 class 是外部的。如果我明确输入它,我会收到未定义的变量错误。我在这里错过了什么?这是否意味着当我省略 extern 关键字时它变成了一个定义但是当我输入它时它只是一个声明?
file1.c
#include <stdio.h>
#include <stdlib.h>
extern void file2function();
int variable; // if i put extern i will get error, isnt it implicitly extern?
int main()
{
variable = 1;
printf("file1 %d\n",variable);
file2function();
return 0;
}
file2.c
#include <stdio.h>
#include <stdlib.h>
extern int variable;
void file2function(){
variable = 2;
printf("file2 %d\n",variable);
return;
}
You need to take a look at the difference between a definition and a declaration
就是说,带有 extern
存储的变量声明是对编译器的提示,该对象在其他地方(或翻译单元)定义。它本身并不是一个定义。
您需要在用于生成二进制文件的翻译单元之一中进行定义。
在您的情况下,如果您在两个文件中都放入 extern
,则 int variable
成为两种情况下的声明。这就是为什么在链接阶段,编译器无法找到 promised 的 definition,所以它会尖叫。
另一方面,如果您从一个(仅一个)文件中删除 extern
,在该文件中,int variable;
是definition 另一个翻译单元参考了这个定义,so, all good.