枚举丢失导致编译器错误

时间:2015-09-06 01:33:35

标签: c++ c++11 enums

遵循here的代码:

enum class OS_type { Linux, Apple, Windows };

const std::string ToString(OS_type v)
{
    switch (v)
    {
        case Linux:   return "Linux";
        case Apple:   return "Apple";
        case Windows: return "Windows";
        default:      return "[Unknown OS_type]";
    }
}

我想删除default,而是强制编译器在我的枚举上没有完成切换时生成错误。

1 个答案:

答案 0 :(得分:2)

GCC / Clang

您正在寻找-Wswitch-enum

  

每当switch语句具有枚举类型的索引时发出警告   缺少该枚举的一个或多个命名代码的情况。   枚举范围之外的案例标签也会引发警告   使用此选项。 -Wswitch与此之间的唯一区别   选项是此选项提供有关省略的警告   枚举代​​码,即使有默认标签。

const std::string ToString(OS_type v)
{
    // warning: enumeration value 'Windows' not handled in switch [-Wswitch-enum]
    switch (v)
    {
        case OS_type::Linux:   return "Linux";
        case OS_type::Apple:   return "Apple";
        default:      return "[Unknown OS_type]";
    }
}

即使使用默认值,它也会抱怨缺少Windows枚举。只需为Windows创建案例并对默认设置进行覆盖以抑制枚举。

Visual Studio

VS在编译器级别3和4处理此问题。您需要启用警告C4061 / C4062https://msdn.microsoft.com/en-US/library/96f5t7fy.aspx