查找未使用的枚举成员的最快方法是什么?
逐个评估值不会起作用,因为我有近700名成员,并希望修剪一些未使用的成员。
答案 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并确保编译器/构建系统不会在第一个错误上停止 - 并且您将拥有所有正在使用的枚举的列表!
至少,我就是这样做的。