gpt4 book ai didi

c - block 和循环之间到底有什么区别?

转载 作者:行者123 更新时间:2023-12-04 09:08:13 25 4
gpt4 key购买 nike

代码 1:没有警告 - 没有错误......一切正常

#include <stdio.h>

int main()
{
int r = 1;
printf("using %d\n", r);

for (int k = 1; k <= 2; k++)
{
int r = r * 2;
}

return 0;
}
代码 2:错误的
#include <stdio.h>

int main()
{
int cnt = 1;
printf("using %d\n", cnt);

{
int cnt = cnt * 2;
}

return 0;
}
编译器响应:
'cnt' is used uninitialized in this function [-Werror=uninitialized]
int cnt = cnt * 2;
所以,我知道 loop 之间有一些区别。和 block在这种情况下,但我无法弄清楚。谁能告诉我如何 scope of a variable在这里工作?

最佳答案

他们都有完全相同的问题,即 rcnt在各自的程序中自初始化。
这可能是未定义的,因为如果它们碰巧具有陷阱表示,则使用未初始化的变量(具有不确定的值)。gcc碰巧在一种情况下检测到它,而在另一种情况下则没有。 gcc-Wuninitialized -Winit-self选项,但即使使用这些选项,它仍然无法检测到第一种情况。无论如何,问题仍然存在(并且相同)。

关于c - block 和循环之间到底有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63408436/

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