这将在短路评估中首先执行(&& b)

时间:2013-07-22 21:42:33

标签: c

假设我有以下代码:

if (a&&b)
{
...
}

第一个问题,谁决定在这种情况下使用短路评估?编译器还是C标准?

第二个问题,首先评估哪一个? ab。序列由谁决定,是否有办法改变我的代码中的序列?

1 个答案:

答案 0 :(得分:7)

  1. 标准要求进行短路评估。

  2. 首先是a。你不能在程序中改变它。

  3. 参考: 6.5.13逻辑AND运算符,第4段:

      

    与按位二进制 & 运算符不同, && 运算符可保证从左到右的评估;如果计算第二个操作数,则在第一个和第二个操作数的计算之间存在一个序列点。如果第一个操作数比较等于0,则不评估第二个操作数。