这是一个例子来说明我的问题,它涉及到一些更复杂的代码,我不能在这里发布。
#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 + + ,尽管它们是不同的,因为如果它们是不同的,我会对这两种语言的答案感兴趣。)