#include <stdio.h>
int i;
int main()
{
extern int i;
if (i == 0)
printf("scope rules\n");
}
Run Code Online (Sandbox Code Playgroud)
输出:范围规则
extern变量如何在这里起作用?
为什么没有像这样的错误
Compile time error due to multiple declaration
extern实际上并不创建变量.它就像一个类的前向声明,或函数的原型.开头的变量"i"创建一个名为"i"的全局整数,它将存在于当前编译单元中,而"int main"下的" i "是一个名为"i"的整数存在于某个编译单元某处的声明,名称"i"的任何使用都是指该变量.
因为您可以根据需要多次声明某事物存在(假设每次的类型都相同),但您只能定义一次。
extern int i是一个i存在的声明,并且是一个int.
当它存在是在文件级别(在int i头后),具有静态存储时间。这意味着它已初始化为零,因此您将始终看到输出"scope rules"。
这是一个微妙的概念,声明/定义的区别,但它是每个 C 程序员最终都应该好好学习的概念。