#include <stdio.h>
int main() {
int c = c;
printf("c is %i\n", c);
return 0;
}
我正在定义一个名为的整数变量c
,并且我将其值分配给自身。但这怎么能编译呢?c
还没有初始化,那么如何给它自己赋值呢?当我运行程序时,我得到c is 0
.
我假设编译器正在生成为分配空间的汇编代码c
变量(当编译器遇到int c
陈述)。然后它获取未初始化空间中的任何垃圾值并将其分配回c
。这是正在发生的事情吗?
我记得在之前的回答中引用过这一点,但现在找不到。
C++03 §3.3.1/1:
名称的声明点紧接在其完整声明符(第 8 条)之后和其初始值设定项(如果有)之前,...
因此,变量 c 即使在初始化器部分之前也是可用的。
Edit:抱歉,您专门询问了 C;虽然我确信那里有一条等效的线。詹姆斯·麦克内利斯发现了它:
C99 §6.2.1/7:任何不是结构、联合或枚举标记的标识符“其范围在其声明符完成后开始”。声明符后面跟着初始化程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)