这是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
我的问题是产出不同的技术原因是什么?
答案 0 :(得分:0)
技术原因是这种操作没有定义的行为,允许编译器按照自己的意愿处理这种订单。此类案例通常称为未定义行为。
答案 1 :(得分:0)
根据C语言,像++i + i++ + ++i + i++
这样的表达式有undefined behavior。
答案 2 :(得分:0)
在i++
表达式中,会发生两件事。首先,表达式计算为i
,然后i
递增。 'later'的行为未定义。如果一个语句中有4个这样的表达式,那么有无数可能的命令来评估增量和减量。