从右到左执行printf()中的语句吗?

时间:2018-08-28 09:03:21

标签: c logic compiler-optimization

如果C编译器从左到右工作,那么为什么以下代码的输出就像从右到左执行一样?

int x = 15 ; 
printf("%d %d %d", x!=15, x=20, x<30); 

输出:     1 20 1

1 个答案:

答案 0 :(得分:2)

首先,这些是表达式而不是语句。

第二,参数评估的顺序为未指定。您无法确定参数将按什么顺序求值,而您的代码将导致undefined behavior

有关评估顺序和测序的更多信息,请参见例如this reference