【发布时间】:2019-06-30 19:58:27
【问题描述】:
我想做类似printf("%d,%d",array[c], array[c+1]) 的事情,每次迭代中只有一个变量会增加。我写了以下代码,我期望标准输出为“1,2”,我错了:
#include <stdio.h>
int main()
{
int c = 1;
printf("%d,%d",c++,c++); /* 2,1 */
//printf("%d,%d",c,c++); /* 2,1 */
//printf("%d,%d",c++,c); /* 1,2 */
}
如果我尝试执行printf("%d,%d",c++,c) 和printf("%d,%d",c,c++),我可以看到“c++”语句没有定义的执行顺序。
有人能解释一下我编写的代码是如何编译成的吗?以及它为什么以及如何根据“c++”语句的位置发生变化。
【问题讨论】:
-
订单未指定。但这也是
c++两次没有序列点的未定义行为。