c - 在 C 语言中,代码在未定义行为之前有任何保证吗?

标签 c standards

在下面的代码中是否保证打印“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/

相关文章:

delphi - 是否期望Delphi 7中项目组的所有单位都在一个文件夹中?

python - 在 Mac Os 中编译和链接 Python 模块

c - c中的线程定时器

比较内存地址

c - LLVM——链接问题

javascript - 允许重复的属性名称的目的是什么?

java - Spring——解耦与性能

c++ - 是否有 C++ 的无堆栈或无堆实现?

c++ - 为什么默认参数在模板函数中不起作用?

c - 使用两个 for 循环找到最不频繁的数字?