现代编译器(GCC)是否足够聪明以优化此无操作功能? 我知道他们可以优化no-op,但我想知道他们如何确定函数调用是否实际上是无操作。
void someFunction(){
if false{
doFunction()
}
}
答案 0 :(得分:3)
嗯,首先,它根本不会编译,因为你的条件缺少括号: - )
但是,有了这个问题,我认为你会发现if
语句本身(以及它的正文)可以优化不存在。 someFunction()
函数几乎肯定会保留,因为你可以从某个地方调用它,而某个地方可能来自完全不同的翻译单元(源文件)。
如果它是 static 并且编译器可以推断出该函数未被使用,则可以删除整个函数。这是有效的,因为它是静态的,不能从其他地方调用。
但是,你必须要小心。调用函数不是使用它们的唯一方法,还有其他可能性,例如获取它们的地址并使用,,例如回调。
答案 1 :(得分:0)
现代编译器执行静态分析并删除无法访问的代码。