簡體   English   中英

警告:案例不是以枚舉類型評估的?

[英]Warning: case not evaluated in enumerated type?

最近,我升級到了新的編譯器Clang LLVM 4.0及其更好的版本。 只是在這種情況下,它向我顯示了一些舊的舊代碼的丑陋警告:

警告: case value not in enumerated type 'SomeConstants' (aka 'enum SomeConstants') [-Wswitch]

switch (var) {
    case kConstant: case 3: case 4: case 8: case 35: //WARNING HERE :(
    // do my thing here
    break;
    case kOtherConstant:
    // do another thing here
    break;
    default:
    break;
}

var可能是枚舉中定義的值之一,如下所示:

typedef enum SomeConstants {
    kConstant,
    kOtherConstant,
};

如您所見,沒有定義2、4、8、35(這就是編譯器進行合並的原因),但實際上它們發生了(這是我正在使用的此封閉源代碼庫的晦澀部分)。

有什么辦法可以以某種方式修改我的開關代碼,以便我不會收到無害但煩人的警告? 現在我正在使用以下方法使其靜音:

switch (var) {
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wswitch"
    case kConstant: case 3: case 4: case 8: case 35:
#pragma GCC diagnostic pop
    ...

我想知道是否有更優雅的方法來解決這個問題。

您可以將switch()語句的表達式switch()int以便它不/不能執行該檢查。

畢竟,它實際上是用於保存int值的,而不是列出的枚舉數之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM