我想在代码库中查找未使用的函数-包括跨编译单元.我用GCC作为我的编译器.

下面是一个示例:

foo.c(假设适当的foo.h):

void foo() {
   ....
}

void bar() {
   ....
}

main.c:

#include <stdio.h>
#include "foo.h"  

int main(void)  {
    bar();
    return 0;
}

在本例中,我希望得到关于不使用foo()的警告.

-Wunused-function个GCC选项:

-Wunused-function

只要声明了静电函数但未定义,或未使用非内联静电函数,就会发出警告.此警告是 按墙启用.

但这仅适用于静电函数-它不会对上面的示例产生警告.

我也会接受工具/脚本/其他编译器的建议,这些工具/脚本/编译器可以为我做到这一点——不过如果可能的话,我更愿意使用gcc.

推荐答案

LibreOffice开发人员Caolan Mc Namara制作了一个小工具来检测LibreOffice源代码中的此类情况.他们有大约数千个LibreOffice中未使用的函数和方法.他的工具是移除它们的关键因素.

它叫callcatcher.它可以

收集定义的函数/方法并减go 调用/引用的函数/方法

它直接作用于汇编器输出,因此,它只适用于x86和x86_64体系 struct .它可以产生this这样的输出.您可以将它与您对GCC的传统编译和链接调用集成在一起.

草兰同意它应该成为GCC的插件.

C++相关问答推荐

理解C版宏(看起来像未声明的变量?)

插座打开MacOS组件

判断X宏的空性

用gcc-msse 2编译的C程序包含AVX 1指令

在C中包装两个数组?

GCC奇怪的行为,有fork 和印花,有换行符和不换行符

变量的作用域是否在C中的循环未定义行为或实现定义行为的参数中初始化?

如何使用FSeek和文件流指针在C中查找文件的前一个元素和前一个减go 一个元素

将多项式从文件.txt加载到终端时出现问题

Printf()在C中打印终止字符之后的字符,我该如何解决这个问题?

C中的空指针是什么(_N)?

UpDown控制与预期相反

与指针的原始C数组或C++向量<;向量<;双>>;

当另一个指向 const 的指针观察到数据时,通过指针更改数据是否安全?

指向返回 struct 成员的指针,安全吗?

C simd _m128 晶圆厂

当 a 是代码块时使用逗号运算符 (a, b)

窗口消息处理函数以某种方式更改了应保持不变的 int 变量的值

计算 e^x 很好.但不是 x 的罪

对 getchar 函数和 EOF 感到困惑