0

如果我有一些看起来像这样的代码:

if(someInteger || somecomplexfunction() > 0) {
    // do something
}

someInteger如果计算结果为真,会调用该函数吗?

ps 用 GCC 编译-O2

4

1 回答 1

6

不,不会的。C 中的逻辑运算符短路,因此如果 an 的左侧||为真,则右侧不会计算(因此该函数不会执行,并且它可能具有的任何副作用都不会生效)。与 类似&&,如果左侧评估为 false,则右侧不会被评估。

这是在 C 标准中定义的,并且无论编译选项如何,都会发生在任何符合标准的编译器中。

虽然这有时会带来更好的性能,但这并不是编译器选择进行的优化,而是根植于 C 语言语义中的东西。

于 2011-08-15T03:23:26.633 回答