c语言的增量运算符的问题

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

请问要怎么解释上面的结果呢?

阅读 2.5k
2 个回答

C标准保证printf的参数在进入printf (一个"sequence point" ) 前被求值,不保证这些参数的求值顺序。不要这样写。

另外逗号表达式那个评论是错的,如果 (num++, ++num)是一个表达式,第二个%d会变成随机的奇怪数字。
例: printf("%d %d\n", (num++, ++num));

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进