效率 - 条件语句中的函数调用

时间:2011-08-15 03:21:39

标签: c performance conditional function-call processing-efficiency

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

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

如果someInteger评估为真,是否会调用该函数?

P.S。使用-O2

与GCC进行编译

1 个答案:

答案 0 :(得分:6)

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

这是在C标准中定义的,无论编译选项如何,都可以在任何符合标准的编译器中进行。

虽然这有时会带来更好的性能,但这不是编译器选择制作的优化,而是根深蒂固的C语义。

相关问题