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 成为两种情况下的声明。这就是为什么在链接阶段,编译器无法找到 promiseddefinition,所以它会尖叫。

另一方面,如果您从一个(仅一个)文件中删除 extern,在该文件中,int variable;definition 另一个翻译单元参考了这个定义,so, all good.