在一些遗留代码中,我有很多枚举,以及一个巨大的切换案例.我想测试一下开关是否具有纯枚举类型.无意义的例子:
typedef enum EN
{
EN_0,
EN_1
} EN_T;
typedef enum DK
{
DK_0,
DK_1
} DK_T;
EN_T bar = ...
switch( bar )
{
case EN_0:
...
break;
case DK_1: //<-- mixed type
...
break;
}
Run Code Online (Sandbox Code Playgroud)
我试着编译它gcc with -Wall -Wextra -pedantic,并没有得到任何警告.有关如何测试的任何想法?作为编译器警告或专用测试代码.由于交换机和枚举都有100多个成员,因此它必须是某种程度的通用.
编辑:请注意我不关心这是否合法c,根据C标准.
这是不好的做法,编译器可以警告不良做法或潜在的错误,不会违反标准,if( a = 1)...总是如此,完全合法,但可能是一个错误.
如果枚举上的开关不包含该枚举aso的所有值,我可以使编译器发出警告
如果编译器可以工作,那是首选,但如果像lint或类似的工具可以做到这一点,我也会很开心.