gpt4 book ai didi

c - 如果一个变量未初始化,它什么时候抛出错误,什么时候给出垃圾值?

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

我使用 ideone.com 运行了以下代码:

#include <stdio.h>

int main(void)
{
int i,j=0;
if(j)
{
j=0; //To suppress the warning that j is not used
i=1;
}
printf("%d\n",i);
}

输出:垃圾值:

 #include <stdio.h>

int main(void)
{
int i;
if(0)
{
i=1;
}
printf("%d\n",i);
}

输出:

Error: unitialized local variable i used.

是不是因为编译器在优化的时候把 if(0) block 完全去掉了?在 if(j) 的情况下不能进行这样的优化,因为它是一个变量?j 的值不会在编译时出现并且必须进行相同的优化吗?还是仅在运行时分配内存?

最佳答案

据我所知,Ideone 使用的是 gcc,您使用的代码必须使用 -Werror,因为通常 -Wuninitialized只是一个警告,但如果与 -Werror 一起使用,则会将其变成错误。我们可以看到,何时触发此警告非常依赖于您的优化设置和 gcc 的版本,他们的文档说:

Because these warnings depend on optimization, the exact variables or elements for which there are warnings depends on the precise optimization options and version of GCC used.

Note that there may be no warning about a variable that is used only to compute a value that itself is never used, because such computations may be deleted by data flow analysis before the warnings are printed.

在所有 online compilers available 中我更喜欢 Coliru当我想试验编译器标志和不同的编译器时,因为它允许最直接的方式来操作它们。

归根结底,使用未初始化的变量是 undefined behavior并且编译器没有义务为此生成警告,编译器可以用未定义的行为做非常意想不到的事情作为问题 Why does this code output more than 4 lines?演示。

关于c - 如果一个变量未初始化,它什么时候抛出错误,什么时候给出垃圾值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24367753/

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