如果在编译时优化

时间:2016-02-04 13:12:29

标签: c function optimization compilation

我想知道编译器是否优化了在编译时知道参数的C函数吗?

例如,在下面的代码中,由于OR(||)函数的一个参数已知为真,因此if函数的条件始终为{{1 }}。它会自动优化吗?它可以推广到所有C函数吗?

true

3 个答案:

答案 0 :(得分:2)

编译器可以优化代码中的if语句,因为条件总是为真。这允许 as-if 规则。但是否这样做取决于编译器及其优化级别。

答案 1 :(得分:2)

AC编译器无法优化rand() % 8 < 7,因为调用rand()会产生副作用:即内部种子会发生变异。

显然,||的快捷方式属性意味着在rand()的情况下不会调用if (1 || rand()),但这是语言定义良好的属性,而不是编译器的选择主动。

编译器可以很好地优化没有副作用的函数,尤其是那些在C标准库中定义的函数。

答案 2 :(得分:0)

是的,优化器会删除他们知道永远不会采用的代码分支。无论如何,静态分析的深度因编译器而异。

我怀疑当前的编译器确实推断出“复杂”算术表达式的上限/下限,就像你提到的那样,以便对比较结果进行硬编码。