这是一个例子来说明我的问题,其中涉及一些更复杂的代码,我不能在这里发布.
#include <stdio.h>
int main()
{
int a = 0;
for (int i = 0; i < 3; i++)
{
printf("Hello\n");
a = a + 1000000000;
}
}
此程序在我的平台上包含未定义的行为,因为a
将在第三个循环中溢出.
这是否使whole program具有未定义的行为,或者仅在overflow actually happens之后?编译器是否有可能计算出a
will溢出,这样它就可以声明整个循环未定义,而不会费心运行printfs,即使它们都发生在溢出之前?
(标记C和C++虽然不同,因为如果两种语言不同,我会对它们的答案感兴趣).sub>