这个程序的输出结果?请分析

来源:百度知道 编辑:UC知道 时间:2024/05/24 18:46:52
#include<stdio.h>
void main(){
int i=8;
printf("%d\n%d\n%d\n%d\n%d\n",++i,--i,i--,i++,-i--);
}

因为函数参数的求值顺序是从右至左。所以:
8
7
8
8
-8

未定义。基本上,无论 C 还是 C++,如果你在同一个表达式中两次读取同一个变量,并且还对该变量进行写操作,那么结果就是未定义的。不要这么干。还有个例子是:

v[i] = i++;

相关的例子:

f(v[i],i++);

在此,因为函数参数的求值顺序是未定义的,所以结果也是未定义的。

之所以不定义求值顺序,是为了让编译器有更大的自由度去生成性能更高的代码。编译器应该为类似这些例子发出警告,因为这些都是典型的微小错误(或者说是潜在的微小错误)。很遗憾,尽管数十年的工夫过去了,大多数编译器仍然不会为此发出警告,而将这项工作交给了专门的、独立的、并且鲜有人用的工具。

9
8
8
7
-8

不同的编译器输出结果不同,不过printf函数的输出顺序是由右往左输出
其中一种输出结果是:7,6,8,7,-8