遵循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
,而是强制编译器在我的枚举上没有完成切换时生成错误。
答案 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 / C4062
。 https://msdn.microsoft.com/en-US/library/96f5t7fy.aspx