2014-01-12 33 views
1

有什麼方法可以限制在switch語句中可以作爲個案的值?有什麼辦法可以限制在switch語句中可以作爲例子使用的值嗎?

說,例如,我用C

#include "stdio.h" 
#include "stdlib.h" 

#define FRIDAY (5) 

typedef enum { 
    SUNDAY, 
    MONDAY, 
    TUESDAY, 
    WEDNESDAY, 
    THURSDAY 
}e_case_values; 

int main() 
{ 
    e_case_values case_value = SUNDAY; 

    switch(case_value) 
    { 
     case SUNDAY: 
      printf("The day is Sunday"); 
     break; 

     case MONDAY: 
      printf("The day is Monday"); 

     case FRIDAY: 
      printf("The day is Friday"); 

     default: 
      printf("Some odd day"); 
    } 

    return EXIT_SUCCESS; 
} 

有此代碼現在,我的目標是,switch語句只能拿它們由枚舉e_case_values,而不是通過任何其他方式定義的值。如果代碼確實包含這種用法,我希望在編譯期間拋出錯誤。有沒有辦法做到這一點?

回答

3

我能想到的最接近的是使警告:

main.cpp:27:9: warning: case value '5' not in enumerated type 'e_case_values' 
         [-Wswitch] 

     case FRIDAY: 

然後,你可以做-Werror=switch只把這個警告視爲錯誤。它不會影響其他警告。 問題當然是您在錯誤消息中看到了 5而不是 FRIDAY我沒有看到#define FRIDAY (5)

+0

謝謝......這就是我一直在尋找的。我修改了我的代碼以處理其餘未使用的案例(星期二,星期三,星期四)。我使用(gcc enum_expts.c -Wswitch-enum -Werror = switch-enum)編譯了代碼,並獲得了我想要的內容......感謝您的及時幫助...... –

3

沒有,有沒有辦法做到這一點在C

相關問題