gpt4 book ai didi

c - 为什么这个 C 代码可以编译?

转载 作者:太空狗 更新时间:2023-10-29 16:26:27 25 4
gpt4 key购买 nike

#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:

The point of declaration for a name is immediately after its complete declarator (clause 8) and before its initializer (if any), ...

因此,即使在初始化部分之前,变量 c 也是可用的。

编辑 抱歉,您专门询问了 C;虽然我确定那里有一条等效的线。 James McNellis 发现了它:

C99 §6.2.1/7: Any identifier that is not a structure, union, or enumeration tag "has scope that begins just after the completion of its declarator." The declarator is followed by the initializer.

关于c - 为什么这个 C 代码可以编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3239386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com