C中具有相同名称的extern和全局变量

Chi*_*hak 4 c global external extern

我想弄清楚如果在某些程序中我们会有这样的情况会发生什么:

extern int x;

void foo(){...}
void bar(){...}

void main(){
foo();
bar();
}
int x=0;
Run Code Online (Sandbox Code Playgroud)

那么假设会发生什么?为什么允许两个具有相同名称的变量?它们是否不同?

usr*_*usr 7

它们不是"两个"变量.他们是一样的.

extern int x;
Run Code Online (Sandbox Code Playgroud)

是宣言x.

int x=0;
Run Code Online (Sandbox Code Playgroud)

提供了定义x.这非常好,有效.


你可以有多个声明,例如:

extern int x;
extern int x;
Run Code Online (Sandbox Code Playgroud)

它也会编译.

请注意,当您为同一标识符提供多个声明时,规则有些复杂.请参阅:6.2.2标识符的链接以获取详细信息.有关示例,请参阅m的静态声明遵循非静态声明.