#include <stdio.h>
int i;
int main()
{
extern int i;
if (i == 0)
printf("scope rules\n");
}
输出: 作用域规则
外部变量在这里如何工作?
为什么没有像“由于多次声明导致编译时错误”这样的错误?
#include <stdio.h>
int i;
int main()
{
extern int i;
if (i == 0)
printf("scope rules\n");
}
输出: 作用域规则
外部变量在这里如何工作?
为什么没有像“由于多次声明导致编译时错误”这样的错误?
extern并不实际创建变量。它类似于类的前向声明或函数的原型。在起始处,变量"i"创建了一个名为"i"的全局整数,在当前编译单元中存在;而在"int main"下面的"i"是一个声明,表示某个编译单元中存在一个名为"i"的整数,使用"i"名称的任何用法都指向该变量。
extern int i
是一个声明,表示i存在,并且是一个int类型。
i存在于文件级别(头文件后面的int i),具有静态存储期。这意味着它被初始化为零,因此您将始终看到输出"scope rules"
。i
并没有仅有一个作用域。它是一个具有作用域的声明;标识符具有独立的存在。 - Eric Postpischil