小编Otz*_*zen的帖子

在交换机中捕获混合枚举

在一些遗留代码中,我有很多枚举,以及一​​个巨大的切换案例.我想测试一下开关是否具有纯枚举类型.无意义的例子:

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或类似的工具可以做到这一点,我也会很开心.

c enums

11
推荐指数
2
解决办法
1131
查看次数

标签 统计

c ×1

enums ×1