不同编译器上的不同输出

时间:2010-11-15 09:12:21

标签: c++ c

  

可能重复:
  FAQ : Undefined Behavior and Sequence Points

不同编译器的不同输出? 这是真的,某些语句可以在不同的编译器上生成不同的输出。我有两个编译器方便的gcc和msvc表达版。当我在他们两个上尝试代码示例时,我很震惊地看到它们有不同的输出。

这是代码示例。

#include<stdio.h>
int main(void)
{
int variable_a = 100;
printf("%d %d", ++variable_a, variable_a++); return 0;
}

我在gcc上获得的输出是102 100 在msvc上我得到102 101 为什么会有这样的差异呢?

2 个答案:

答案 0 :(得分:4)

通过多次递增a来调用未定义的行为。任何编译器都有权侵入你的房子并用棍子打你。

答案 1 :(得分:1)

这种语言明确未定义,有各种微妙的影响。有很多历史背后的原因,语言为什么不定义这些角落。从编码员的角度来看,我们需要避免某些模式,例如你偶然发现的模式。

See this reference for some explanation