假設您有一個枚舉類型,其值爲50+個條目。有些時候我已經在這個數量的條目中切換/包含了一個枚舉值,但只是爲了檢查2到5個條目。例如,OpenGL將其大多數枚舉枚舉在一個枚舉類型中,稱爲GLenum
。這些值的範圍從GL_VERTEX_SHADER
到GL_STREAM_DRAW
到GL_TRIANGLES
到GL_ARRAY_BUFFER
等使用枚舉關閉開關/ case語句的編譯器警告
正如你所看到的,而這些都是在大局觀方面有關,他們將被用於不符合彼此相關的上下文。
我在Linux中的MinGW/GCC上生成警告,其中每個警告在之間,每枚舉值在其類型聲明中列出。我不確定這是否發生在VC++上,但我想我會考慮它以防萬一。
換句話說,所產生的警告數量TotalEnumValues - AmountOfCaseStatements
每個枚舉值,提供了不是所有的枚舉已經在語句本身,這可以容易導致100+編譯器警告,如果你的枚舉類型包含在被佔至少100個條目。我經常使用if/else來適應這種情況,但是當檢查枚舉值不僅僅是一個條目(這實際上很少見,因爲枚舉的目的通常需要條件邏輯來表達它) ,我總是傾向於使用開關/外殼,因爲我覺得它更美觀(即使它只是編譯成if/else語句))
那麼,這個警告是否可能關閉?如果是這樣,怎麼樣?
至少在VC++中,添加一個空的'default'情況可能會影響代碼生成,但它有['__assume'](http://msdn.microsoft.com/zh-cn/library/1b3fsfxw (VS.100).aspx)只是爲了這個目的。 – ildjarn
@ildjarn編譯器總是可能做一些完全沒有意義和愚蠢的事情,但是僅僅打破默認就意味着缺省缺失...... __assume在這種情況下是無用的。 –
@JimBalter:對'__assume'的看法並不遵循邏輯上的前提。在這裏其實很有用;它告訴編譯器該變量的值不能是'switch'語句中的值。這是現代優化器非常有用的信息。 – MSalters