Function 现代编译器会优化吗;如果为false,则为“;路径?

Function 现代编译器会优化吗;如果为false,则为“;路径?,function,gcc,compiler-construction,Function,Gcc,Compiler Construction,现代编译器(GCC)是否足够聪明,可以优化这个无运算函数? 我知道他们可以优化no-op's out,但我想知道他们能多好地确定函数调用是否实际上是no-op void someFunction(){ if false{ doFunction() } } 现代编译器执行静态分析并删除无法访问的代码。首先,它根本不会编译这些代码,因为您的条件周围缺少括号:-) 但是,有了这个修正,我想你会发现,if语句本身(以及它的主体)可以被优化而不存在。someFunctio

现代编译器(GCC)是否足够聪明,可以优化这个无运算函数? 我知道他们可以优化no-op's out,但我想知道他们能多好地确定函数调用是否实际上是no-op

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

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

首先,它根本不会编译这些代码,因为您的条件周围缺少括号:-)

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

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


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

要真正了解行为,可以在gdb中运行代码并单步执行函数。在gdb中,在开始单步执行代码之前,按Ctrl+x,然后按2以查看代码和相应的程序集。当你跳过已经优化过的代码时,gdb会打印一个优化过的消息值。我只是在写一些快速的伪代码,不应该是一个真正的函数