gpt4 book ai didi

c - 这是有效的 C 吗?没有关于 p 未初始化的警告

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

使用 gcc (4.5) 和尽可能多的 -Wall、-Wextra、-Wuninitialized 类型标志编译此代码片段不会给我任何警告:

int main() {
int *p = p;
printf("p = %p\n", (void *)p);
return 0;
}

但是多次运行它会得到这个输出:

p = 0xbe9ff4
p = 0x550ff4
p = 0xeb1ff4
p = 0x4caff4

...等等。

这是怎么回事?

编辑: 使用“g++ -Wall”编译会如我所料给出警告:

In function ‘int main()’: warning: ‘p’ is used uninitialized in this function

最佳答案

int *p = p;

pint *p 被解析后立即定义,但 RHS 仅在之后计算。这个语句等同于

int * p;
p = p;

这在具有隐式构造函数的 C++ 中有所不同,但在普通的 C 中,这就是您所拥有的。未定义初始值。

就编译器警告而言,这是一个实现质量问题。 gcc 并没有被“欺骗”,它只是被允许了。

关于c - 这是有效的 C 吗?没有关于 p 未初始化的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6676119/

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