C中的AND / OR链

时间:2009-06-09 13:56:29

标签: c expression-evaluation

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

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

OR的相同问题。 (只要有1)

我可以依靠其他C风格的语言吗?

这段代码是否安全:

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

4 个答案:

答案 0 :(得分:10)

是的,保证C,C ++和C#。对于启用了“短流量评估”的Delphi也是如此。

这是许多代码行依赖的行为。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

是的。

我见过那些认为不清楚的人,并用这种形式取代了&&&s ;:

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

我个人认为这有点难看。