查找C语言中未使用的枚举成员



查找未使用的枚举成员的最快方法是什么?

一个一个地注释值是行不通的,因为我有将近700个成员,我想去掉一些没用的。

我不知道任何编译器警告,但您可以尝试使用splint静态分析工具。根据它的文档(重点是我的):

Splint检测常量,函数,参数,变量,类型,枚举成员,以及声明的结构或联合字段但从未使用过。

正如我所检查的,它按预期工作。下面是示例代码:

#include <stdio.h>
enum Month { JAN, FEB, MAR };
int main()
{
    enum Month m1 = JAN;
    printf("%dn", m1);
}

执行splint命令,可以得到如下信息:

main.c:3:19: Enum member FEB not used
   A member of an enum type is never used. (Use -enummemuse to inhibit warning)
main.c:3:24: Enum member MAR not used

注意这里的" unused "是一个相对危险的术语。

typedef enum type_t { VALUE_A, VALUE_B, VALUE_C } type_t;
int main() {
    printf("A = %d, ", VALUE_A);
    printf("C = %d", VALUE_C);
    return 0;
}

将打印A = 0, C = 2,但删除"未使用的"VALUE_B将输出为A = 0, C = 1

如果您保存这些值,对其进行算术运算或在该区域进行任何操作,您可能最终会改变程序的行为。

更改所有枚举的名称(例如,在其名称前添加_)。编译。你会得到很多错误,因为它找不到之前的枚举名(很明显)。一点grep -foo并确保编译器/构建系统不会在第一个错误时停止-并且您将拥有所有正在使用的枚举列表!

至少,我是这么做的。

最新更新