海湾合作委员会 - 功能不起作用(但其他警告正在起作用)



我正在尝试通过使用GCC的-Wunused-function标志在我的代码库中找到未使用的功能。

正如我期望的,用gcc -Wall -Wunused-function main.cpp编译以下代码打印unused variable警告:

warning: unused variable ‘x’ [-Wunused-variable]

但是,编译器没有发出unused-function警告。我该怎么做才能使GCC注意未使用的功能foo()

// main.cpp
void foo(){ } //should (but doesn't) trigger 'unused function' warning
int main (int argc, char **argv){
    int x; //correctly triggers 'unused variable' warning
    return 0;
}

记住,i 确实想要未使用的功能警告。这是不是 a"我如何摆脱警告"问题。

从未将非静态函数视为"未使用",因为其符号已导出并可以由其他汇编单元使用,这是GCC无法检测到的。-Wunused-functions仅记录在警告 static 函数上,这些函数被声明但未被调用。

来自GCC文档:

- Wunused功能:每当声明静态功能但未定义或未使用非内部静态函数时,请警告。此警告是 由-wall启用。

您可以看到,您已经定义并声明了非静态功能。另外,您的功能并未被隔离(您需要使用-O3优化)。

到目前为止,我不确定您在GCC中是否存在什么。:-)但是它的开源..也许您可以实现它?

您可以使用链接器优化找到未使用的非静态功能。

我用

编译了您的Main.cpp
gcc -ffunction-sections -fdata-sections -Wl,--gc-sections -Wl,--print-gc-sections main.cpp

和输出

/usr/bin/ld: Removing unused section '.text._Z3foov' in file '/tmp/cc9IJvbH.o'

表明foo()未使用,链接器可以将其删除。

相关内容

最新更新