现代编译器会优化“if false”路径吗?

时间:2014-01-22 01:19:04

标签: function gcc compiler-construction

现代编译器(GCC)是否足够聪明以优化此无操作功能? 我知道他们可以优化no-op,但我想知道他们如何确定函数调用是否实际上是无操作。

void someFunction(){
    if false{
        doFunction()
    }
}

2 个答案:

答案 0 :(得分:3)

嗯,首先,它根本不会编译,因为你的条件缺少括号: - )

但是,有了这个问题,我认为你会发现if语句本身(以及它的正文)可以优化不存在。 someFunction()函数几乎肯定会保留,因为你可以从某个地方调用它,而某个地方可能来自完全不同的翻译单元(源文件)。

如果它是 static 并且编译器可以推断出该函数未被使用,则可以删除整个函数。这是有效的,因为它是静态的,不能从其他地方调用。

但是,你必须要小心。调用函数不是使用它们的唯一方法,还有其他可能性,例如获取它们的地址并使用,例如回调。

答案 1 :(得分:0)

现代编译器执行静态分析并删除无法访问的代码。