2

我对此非常积极,但为了安全起见:

C标准是否保证AND链(A && B && ...)将从左到右进行评估,并且只要有0,评估就会停止?

或同样的问题。(只要有1)

对于其他 C 风格的语言,我可以指望它吗?

这段代码安全吗:

if (somePtr!=NULL && somePtr->someMember==123)
{
     ...
}
4

4 回答 4

10

是的,它保证适用于 C、C++ 和 C#。启用“短电路评估”的德尔福也是如此。

这是许多行代码到现在所依赖的行为。

于 2009-06-09T13:57:55.667 回答
3

是的,它是由 C 和 C++ 标准化的。

于 2009-06-09T13:57:57.273 回答
0

是的,您对 C 中操作顺序的假设是正确的,并且代码片段将按预期工作。我会根据具体情况采用其他“C 风格”语言。

于 2009-06-09T13:58:02.000 回答
0

是的,它确实。

我见过一些认为不清楚的人,并用这种形式替换了 &&:

if (a)
if (b)
if (c)
if (d) {
}

个人觉得有点丑。

于 2009-06-09T14:02:48.793 回答