在下面的代码中是否保证打印“0\n”?
#include <stdio.h>
int main(void)
{
int c = 0;
printf("%d\n",c);
printf("%d,%d\n",++c,++c);
}
更一般地说,如果一个程序有未定义的行为,是整个程序变成未定义的还是仅从有问题的代码开始的序列点开始?
请注意:我不是询问编译器对第二个 printf 做了什么。我问是否保证会出现第一个 printf。
我知道未定义的行为能够炸毁您的计算机、使您的程序崩溃或诸如此类的事情。
最佳答案
好吧,即使忽略诸如“任何事情都可能发生!程序可能会回到过去并首先阻止自身运行!”之类的事情,编译器完全有可能检测到某些形式的未定义行为并且不会在其中进行编译在这种情况下,您一开始就不会让它运行。所以是的,未定义的行为在原则上是具有传染性的,即使在大多数情况下在实践中不一定如此。
关于c - 在 C 语言中,代码在未定义行为之前有任何保证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4002173/