C程序在不同的编译器上有不同的输出?

时间:2014-03-10 17:50:03

标签: c

这是C程序根据使用的编译器提供不同的输出:

#include<stdio.h>
int main()
{
    int i = 5,j;
    j = ++i + i++ + ++i + i++;
    printf("%d",j);
    return 0;
}

检查以下链接的输出。

http://imgur.com/z9aMSwj,Vwx3P9S

http://imgur.com/z9aMSwj,Vwx3P9S#1

我的问题是产出不同的技术原因是什么?

3 个答案:

答案 0 :(得分:0)

技术原因是这种操作没有定义的行为,允许编译器按照自己的意愿处理这种订单。此类案例通常称为未定义行为

答案 1 :(得分:0)

根据C语言,像++i + i++ + ++i + i++这样的表达式有undefined behavior

答案 2 :(得分:0)

i++表达式中,会发生两件事。首先,表达式计算为i,然后i递增。 'later'的行为未定义。如果一个语句中有4个这样的表达式,那么有无数可能的命令来评估增量和减量。