这是一个示例,用来说明我的问题,其中涉及了一些更加复杂的代码,我无法在这里发布。
#include <stdio.h>
int main()
{
int a = 0;
for (int i = 0; i < 3; i++)
{
printf("Hello\n");
a = a + 1000000000;
}
}
这个程序在我的平台上存在未定义行为,因为 a
在第三次循环时会溢出。
这是否意味着整个程序都有未定义行为,还是只有在溢出实际发生后才有未定义行为?编译器是否可以预测到 a
将会溢出,从而声明整个循环未定义,并且没有运行 printfs 即使它们在溢出之前全部发生了?
(标记了 C 和 C++,尽管它们不同,因为如果它们不同,我将对两种语言的答案感兴趣。)
a
除了计算自身外并没有被使用,然后简单地将a
删除呢? - Support Ukraine