【问题标题】:Compiler Warn on enum编译器警告枚举
【发布时间】:2021-02-24 03:45:45
【问题描述】:

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

enum Brothers {Snee, Snoo, Snum};

int main(void) {

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

}

【问题讨论】:

标签: c gcc enums


【解决方案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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 谢谢,我认为第 20 年将是实施它的魅力:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    相关资源
    最近更新 更多