考虑下面的C++程序并预测其输出。
printf("%d %d %d", i, ++i, i++);
上面通过引用参数列表中的“ i”和“ i ++”来调用未定义的行为。没有定义参数的评估顺序。不同的编译器可能选择不同的顺序。单个编译器还可以在不同时间选择不同的顺序。
例如,下面的三个printf语句也可能导致未定义的行为。
// All three printf() statements
// in this cause undefined behavior
#include
int main()
{
volatile int a = 10;
printf("\n %d %d", a, a++);
a = 10;
printf("\n %d %d", a++, a);
a = 10;
printf("\n %d %d %d ", a, a++, ++a);
return 0;
}
因此,建议不要在同一语句中不要执行两个或两个以上的前或后增量运算符。
这意味着在此过程中绝对没有时间顺序。参数可以以任何顺序进行评估,评估过程可以以任何方式交织在一起。
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。