switch
語句可以產生具有多個分支的控制流程。它的格式是:
switch (控製表達式) {
case 常量表達式: 語句列表
case 常量表達式: 語句列表
...
default: 語句列表
}
例如以下程序根據傳入的參數1~7分別打印Monday~Sunday:
如果傳入的參數是2,則從case 2
分支開始執行,先是打印相應的信息,然後遇到break
語句,它的作用是跳出整個switch
語句塊。C語言規定各case
分支的常量表達式必須互不相同,如果控製表達式不等於任何一個常量表達式,則從default
分支開始執行,通常把default
分支寫在最後,但不是必須的。使用switch
語句要注意幾點:
case
後面跟表達式的必須是常量表達式,這個值和全局變數的初始值一樣必須在編譯時計算出來。
第 2 節 “if/else語句”講過浮點型不適合做精確比較,所以C語言規定case
後面跟的必須是整型常量表達式。
進入case
後如果沒有遇到break
語句就會一直往下執行,後面其它case
或default
分支的語句也會被執行到,直到遇到break
,或者執行到整個switch
語句塊的末尾。通常每個case
後面都要加上break
語句,但有時會故意不加break
來利用這個特性,例如:
switch
語句不是必不可缺的,顯然可以用一組if ... else if ... else if ... else ...
代替,但是一方面用switch
語句會使代碼更清晰,另一方面,有時候編譯器會對switch
語句進行整體優化,使它比等價的if/else
語句所生成的指令效率更高。