首页 > 解决方案 > 为什么全局变量默认有外部链接?

问题描述

int x;          // global x, 0 initialized.
extern int y;   // its storage duration, scope and linkage is equivalent to above.
int z = 5;
int main(){ return 0;}

根据https://stackoverflow.com/a/28610934/2402272,规则说:

在任何块之外声明的变量的默认存储持续时间、范围和链接,在最外层,具有静态存储持续时间、文件范围和外部链接

x不能在另一个源文件中定义,因为它没有标记为extern,这样做是未定义的行为: 如何使用 extern 在源文件之间共享变量?

z也不能在另一个源文件中定义,因为我们会multiple definition在链接时出错。

因此,外部链接既不xz无用。为什么他们默认是外部的呢?

标签: c

解决方案


确实,x并且z不能在另一个源文件中定义,因为它们已经定义了。然而,它们可以在另一个文件中声明,以便可以使用它们。

如果您在另一个源文件中有以下内容:

extern int x;
extern int z;

然后,您将能够在该源文件中同时使用x和使用。z

此外,如果您的代码自行编译成可执行文件,则链接阶段将失败,因为y已声明但未定义。


推荐阅读