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