2013-08-18 59 views
0

我可以將多個值傳遞給switch case語句,用逗號分隔不同的值嗎?表達會評估什麼?如果沒有發生錯誤,那麼編譯器將使用多個值中的哪一個來評估交換機?請記住逗號運算符的低優先級?例如我寫的代碼如下:傳遞多個值來切換以逗號分隔值

int m=10; 
switch(m, m*2) 
{ 
    case 10: printf("\n case 10"); 
    case 20: printf("\n case 20"); 
    case 30: printf("\n case 30"); 
    default: printf("\n no case"); 
} 
+1

請注意,在您的代碼中,如果案例匹配'm * 2',所有後續案件將被執行。 「break」通常用於防止這種情況發生,但也許你不希望 –

+0

不要忘記添加「break」。案件之間的陳述。 – OldProgrammer

回答

4

逗號運算符評估所有表達式並返回最右邊的值。 (switch中使用它沒有任何區別。)

您的示例與switch (m*2)完全相同,但如果任何前面的表達式具有副作用,則會在應用之前應用這些副作用switch聲明已執行。

+0

您應該提到操作符在返回之前執行所有表達式;所以它可以使敏感使用它在開關 –

+0

@ a.lasram:謝謝,編輯。 – RichieHindle

+0

你能解釋一下評估所有表達式的含義嗎?這是否意味着它會評估所有與大括號內的值匹配的案例,還是隻有最右邊的值纔會用於匹配? – user2693690