查找未使用的枚举成员的最快方法是什么?
一个一个地注释值是行不通的,因为我有将近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并确保编译器/构建系统不会在第一个错误时停止-并且您将拥有所有正在使用的枚举列表!
至少,我是这么做的。