编译器警告枚举

时间:2021-02-24 03:45:45

标签: c gcc enums

有没有办法让编译器在整数超出 enum 的“范围”时发出警告?例如,像这样:

enum Brothers {Snee, Snoo, Snum};

int main(void) {

  enum Brothers k;
  k = Snee;
  k = 9; // compiler warning for an int outside [0,2] ?

}

2 个答案:

答案 0 :(得分:1)

我在 GCC 上找不到与您想要的完全匹配的选项。有一些用于 GCC 的与枚举相关的编译器标志 可以使枚举的行为稍微好一些。例如,当比较不同类型的枚举是否相等时,-Wenum-compare 会给出警告:

enum fruit {                                                                                                            
    APPLE,                                                                                                              
    BANANA                                                                                                              
};                                                                                                                      
                                                                                                                      
enum colors {                                                                                                           
    RED,                                                                                                                
    BLUE                                                                                                                
};                                                                                                                      
                                                                                                                                                                                                                                     
if (APPLE == RED) { // -Wenum-compare gives compiler warning here.
    ...
}

您正在寻找的选项似乎确实存在于 clang 上,但作为 -Wassign-enum

答案 1 :(得分:0)

从 10.2 版开始不适用于 gcc。有一个相关的 open enhancement request from 2002,但开发人员似乎没有兴趣实现它。

如果给定 -Wassign-enum 选项,clang 会对此发出警告:https://godbolt.org/z/zv8an5