【发布时间】:2009-06-09 13:56:29
【问题描述】:
我对此非常积极,但为了安全起见:
C 标准是否保证 AND 链 (A && B && ...) 将从左到右进行评估,并且只要有 0,评估就会停止?
OR 的问题相同。 (只要有 1)
对于其他 C 风格的语言,我可以指望它吗?
这段代码安全吗:
if (somePtr!=NULL && somePtr->someMember==123)
{
...
}
【问题讨论】:
我对此非常积极,但为了安全起见:
C 标准是否保证 AND 链 (A && B && ...) 将从左到右进行评估,并且只要有 0,评估就会停止?
OR 的问题相同。 (只要有 1)
对于其他 C 风格的语言,我可以指望它吗?
这段代码安全吗:
if (somePtr!=NULL && somePtr->someMember==123)
{
...
}
【问题讨论】:
是的,它保证适用于 C、C++ 和 C#。启用“短期课程评估”的 Delphi 也是如此。
这是目前许多行代码所依赖的行为。
【讨论】:
是的,它是由 C 和 C++ 标准化的。
【讨论】:
是的,您对 C 中操作顺序的假设是正确的,并且代码 sn-p 将按预期工作。我会根据具体情况采用其他“C 风格”语言。
【讨论】:
是的。
我看到有人认为这不清楚,并将 && 替换为这种形式:
if (a)
if (b)
if (c)
if (d) {
}
我个人认为这有点丑。
【讨论】: