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
不,它不会.C中的逻辑运算符短路,所以如果a的左侧||是真的,右侧将不会评估(因此该函数将不会执行,并且它可能没有副作用将生效).同样地&&,如果左侧评估为假,则不会评估右侧.
这是在C标准中定义的,无论编译选项如何,都可以在任何符合标准的编译器中进行.
虽然这有时会带来更好的性能,但它不是编译器选择制作的优化,而是根深蒂固的C语义.
| 归档时间: |
|
| 查看次数: |
448 次 |
| 最近记录: |