int num = 20;
printf("%d %d\n", num++, ++num); //21 22
num = 20;
printf("%d %d\n", ++num, ++num); //22 22
num = 20;
printf("%d %d\n", num++, num++); //21 20
num = 20;
printf("%d %d\n", ++num, num++); //22 20
gcc 版本 4.4.7
请问要怎么解释上面的结果呢?
int num = 20;
printf("%d %d\n", num++, ++num); //21 22
num = 20;
printf("%d %d\n", ++num, ++num); //22 22
num = 20;
printf("%d %d\n", num++, num++); //21 20
num = 20;
printf("%d %d\n", ++num, num++); //22 20
gcc 版本 4.4.7
请问要怎么解释上面的结果呢?
C标准保证printf的参数在进入printf (一个"sequence point" ) 前被求值,不保证这些参数的求值顺序。不要这样写。
另外逗号表达式那个评论是错的,如果 (num++, ++num)
是一个表达式,第二个%d
会变成随机的奇怪数字。
例: printf("%d %d\n", (num++, ++num));
https://en.m.wikipedia.org/wi...
此所谓未定义行为。你应该避免写这样的代码,而不是深究其"原理"。