【发布时间】:2018-09-10 09:18:38
【问题描述】:
考虑这段代码:
int main()
{
printf("Hello World!\n");
int i;
i = i++ + ++i; // UB
}
此代码是否保证打印“Hello World!”?最后一行调用了未定义的行为,但这会使整个程序无效吗?
我找到了this,但这个问题是关于 C++ 的。这是关于C的。
它不是 Undefined behavior and sequence points 的重复,因为它是 C++。答案可能相同也可能不同,但这个问题是关于 C 的。
【问题讨论】:
-
我想我在某处读到了一个程序,其行导致未定义行为实际上是一个具有未定义行为的程序。根据编译器优化,奇怪的事情可能会在所述行之前发生。
-
@kabanus:这与看起来的标准有关。编译器优化超出了标准。如此相关的是最多提供序列点的抽象机器。然而,除了这些人工程序之外,这个问题对于生产代码没有多大意义。
-
@toohonestforthissite 我的意思是编译器可以做任何它喜欢的事情,但我明白你的意思。
-
@melpomene 我添加了A C specific answer that also covers C++,所以现在这是一个可靠的副本。
标签: c undefined-behavior