6

我试图通过使用 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;
}

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

4

3 回答 3

14

非静态函数永远不会被视为“未使用”,因为它的符号已导出并且可供其他编译单元使用,这是 gcc 无法检测到的。-Wunused-functions仅记录以警告已声明但未调用的静态函数。

于 2012-11-04T23:54:57.303 回答
5

来自 gcc 文档:

-Wunused-function:每当声明了静态函数但未定义或未使用非内联静态函数时发出警告。此警告由 -Wall 启用。

如您所见,您已经定义并声明了一个非静态函数。此外,您的函数没有被内联(您需要使用-O3优化)。

到目前为止,我不确定您要求的内容是否存在于 gcc 中。:-) 但它是开源的.. 也许你可以实现它?

于 2012-11-04T23:55:55.220 回答
5

You can find unused non-static functions using linker optimisation.

I compiled your main.cpp with

gcc -ffunction-sections -fdata-sections -Wl,--gc-sections -Wl,--print-gc-sections main.cpp

And the output

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

Shows that foo() is unused and the linker could remove it.

于 2014-05-20T10:09:24.713 回答