#include <stdio.h>
int x=3;
int main()
{
int x=4;
printf("%d",x);
return 0;
}
正如我们所知,地方宣言也是一个全球宣言。由于x
已经全局声明为3,因此新的全局声明(非暂定)不会导致重新声明错误,因为不会发生多个非暂定定义的“合并”当地声明?
答案 0 :(得分:4)
不,这是scope。
x
内的main()
具有块范围,并覆盖(阴影)x
内的全局 main()
。
相关,引用C11
,章节§6.2.1,“标识符范围”,(强调我的)
[...]如果标识符指定同名的两个不同实体 空间,范围可能重叠。如果是这样,一个实体(内部范围)的范围将结束 严格地在另一个实体的范围之前(外部范围)。 在内部范围内, identifier指定在内部作用域中声明的实体;在外部宣布的实体 范围在内部范围内隐藏(并且不可见)。
答案 1 :(得分:2)
正如我们所知,本地声明充当全球声明
没有。那是错的。
在x
存在的情况下,main
无法看到全局x
。编译器不会生成C标准允许的任何警告或错误。
变量的范围是不同的。 x
之外的main
具有全局范围,而x
内的main
具有功能范围。