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

Gri*_*fin 0 c performance conditional processing-efficiency function-call

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

if(someInteger || somecomplexfunction() > 0) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

如果someInteger求值为true,是否会调用该函数?

ps用GCC编译 -O2

Raf*_*ler 6

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

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

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