2015-09-06 52 views
0

繼從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,而是迫使編譯器生成錯誤,如果開關未完成了我的枚舉。

回答

2

GCC /鏘

您正在尋找-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

+0

感謝,任何方式將此警告轉換爲錯誤? – barej

+1

查看'-Werror'。它在同一頁面上列出。 – HelloWorld