2012-09-20 122 views
0
- (void)change:(int)a { 
    int number = a; 
    int max = 10; 

    switch(max) { 
    case number: 
     //Do something 
     break; 

     //.... more cases 
    } 
} 

這只是一個我似乎無法解決的問題的小例子。我已經看過類似的帖子和答案,通常包括通過#define或枚舉使用常量,但是當你有一個固定的常量,但如果值作爲參數傳遞,這些都很好,我該怎麼做?如果可能的話。任何意見,將不勝感激。Switch Statement constant issue

+0

爲什麼要爲此使用開關?如果條件更適合這項工作 – Mike

+1

你試圖通過使用switch語句而不是if語句來完成什麼?我不明白你的例子,我認爲這是一種彌補。你能提供一個更現實的例子,說明你想要做什麼? –

回答

3

簡而言之,case語句只能對常量表達式進行操作,所以如果您需要更多動態條件,則必須使用if語句。

0

switch語句用於根據常量表達式列表測試變量的值。帶有各種case語句的開關與用於相同比較的if/elseif語句之間的區別與邏輯差異相比語法差異更大。

但是,if/elseif語句更加靈活,因爲它們不需要常量表達式,並且您還可以在if/elseif中使用更復雜的邏輯表達式。

例如:

switch (iValue) { 
    case 1: 
     break; 
    case 4: 
     break; 
    default: 
     break; 
} 

的含義,因爲這系列IF/ELSEIF語句相同:

if (iValue == 1) { 
} else if (iValue == 4) { 
} else { 
} 

大多數時候編譯器會產生一系列if/elseif的代碼時它正在生成switch語句的代碼。因此,編譯器爲if/elseif語句系列生成的實際代碼與爲switch語句生成的代碼類似。