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

时间:2016-09-18 13:52:28

标签: c enums

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

逐个评估值不会起作用,因为我有近700名成员,并希望修剪一些未使用的成员。

3 个答案:

答案 0 :(得分:5)

我不知道任何编译器警告,但您可以尝试使用splint静态分析器工具。根据其documentation(强调我的):

  

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

在检查时,它的作用是有意的。以下是示例代码:

#include <stdio.h>

enum Month { JAN, FEB, MAR };

int main()
{
    enum Month m1 = JAN;
    printf("%d\n", 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

答案 1 :(得分:2)

请注意,»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

如果您坚持使用这些值,请对其进行算术运算或该区域中的任何内容,最终可能会改变程序的行为。

答案 2 :(得分:1)

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

至少,我就是这样做的。