【问题标题】:Are statements in printf() executed from right to left? [duplicate]printf() 中的语句是从右到左执行的吗? [复制]
【发布时间】:2019-02-02 20:35:11
【问题描述】:

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

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

输出: 1 20 1

【问题讨论】:

  • 不,订单未指定。你正在做的是未定义的行为
  • 只是为了消除任何潜在的混淆 - 它们可能在您的系统上按特定顺序执行,但它们可能在另一台计算机上或使用另一个编译器以任何其他顺序执行。
  • "如果 C 编译器从左到右工作,那么为什么...?"这就像在说“如果钱是免费的,那为什么当我去银行要一些他们没有给我的时候?” :-)

标签: c logic compiler-optimization


【解决方案1】:

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

其次,参数评估的顺序是未指定。您无法确定参数的评估顺序,您的代码将导致undefined behavior

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

【讨论】:

    猜你喜欢
    • 2012-12-18
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多