我想在代码库中查找未使用的函数-包括跨编译单元.我用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.它可以

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

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

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

C++相关问答推荐

如何在 C++ 中包含使用 C++ 关键字作为标识符的 C 标头?

从带有句点的文件中读取数字(整数和小数)作为分隔符

旋转位图并将浮点格式的结果坐标转换回像素数组的整数 x,y 值

C 中使用数组、推送、弹出和显示的堆栈实现

为双指针的顶层分配内存

从数组伪排序

打印函数指针时不兼容的指针类型警告

打印素数的程序

OpenSSL 3 Diffie-Hellman 密钥交换 C++

我们可以在变量名中写注释吗?

如何制作一个不会被优化的无限空循环?

C 中数组索引的求值顺序(相对于表达式)

升级到 Catalina 10.15 后无法在 Mac 上编译 C 程序

程序是 32 位还是 64 位意味着什么?

C/C++ 中的 const 数组和静态 const 数组有什么区别

C语言中i++和(i)++的区别

为什么不自动假定#pragma 一次?

“for”循环内的“for”循环可以使用相同的计数器变量名吗?

C 标准是否允许为指针分配任意值并递增它?

为什么要在 C 和 C++ 项目中创建 include/ 目录?