sol*_*les 5 c c++ gcc compiler-warnings
我试图通过使用GCC的-Wunused-function标志在我的代码库中找到未使用的函数.
正如我所料,编译下面的代码会gcc -Wall -Wunused-function main.cpp打印一个unused variable警告:
warning: unused variable ‘x’ [-Wunused-variable]
Run Code Online (Sandbox Code Playgroud)
但是,编译器不会发出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;
}
Run Code Online (Sandbox Code Playgroud)
请记住,我确实想要未使用的功能警告.这不是 "我怎么摆脱警告"的问题.
hob*_*bbs 13
非静态函数永远不会被视为"未使用",因为它的符号被导出并可供其他编译单元使用,这是gcc无法检测到的.-Wunused-functions仅记录以警告已声明但未调用的静态函数.
来自 gcc 文档:
-Wunused-function:每当声明了静态函数但未定义或未使用非内联静态函数时发出警告。此警告由 -Wall 启用。
如您所见,您已经定义并声明了一个非静态函数。此外,您的函数没有被内联(为此您需要使用-O3优化)。
到目前为止,我不确定您要求的内容是否存在于 gcc 中。:-) 但它是开源的……也许你可以实现它?
您可以使用链接器优化查找未使用的非静态函数。
我用编译了你的main.cpp
gcc -ffunction-sections -fdata-sections -Wl,--gc-sections -Wl,--print-gc-sections main.cpp
Run Code Online (Sandbox Code Playgroud)
和输出
/usr/bin/ld: Removing unused section '.text._Z3foov' in file '/tmp/cc9IJvbH.o'
Run Code Online (Sandbox Code Playgroud)
显示foo()未使用,链接器可以将其删除。