關於Switch case條件語句中無break的用法


關於Switch case條件語句的另類用法
      今天在拜讀一位前輩的程序時,遇到了這樣一段程序:
/***************************/
switch(operation)
{
case Dir_CCW_Cycle: // 語句1
case Dir_CW_Cycle:
{
Dir = (operation == Dir_CW_Cycle)?Dir_CW_Cycle:Dir_CW_Cycle; //語句2
break;
}
default:
break;
}
/**************************/
      第一眼看到這個程序以后覺得語句1沒什么執行的語句何必要寫,語句2是一個必然的結果,何必要判斷呢。但是真正運行了以后發現了程序的真正奧妙所在,不得不說C語言真是一門神奇的語言。再仔細看看,發現語句一之后少一個break語句。難道奧妙真的在這里嗎?
       哈哈哈,沒錯就是因為此處少了一個break的原因。查過C語言的書籍之后,這里的做法是為了讓多個分支共享相同的語句,故意省略break;也不失為一種好的處理辦法,但是在使用的時候必須指出,以防止后來人疑惑。
這是一段代碼驗證:
 1 #include "stdio.h"
 2 
 3 #define Dir_CCW_Cycle 0
 4 #define Dir_CW_Cycle 1
 5 
 6 void test(int operation)
 7 {
 8    int Dir = 0;
 9    switch(operation)
10    {
11      case Dir_CCW_Cycle:  
12 
13      case Dir_CW_Cycle:
14          {
15           Dir = (operation == Dir_CW_Cycle)?Dir_CW_Cycle:Dir_CCW_Cycle; 
16                   break;         
17          }
18      default:
19           break;
20    }
22    if(Dir == Dir_CW_Cycle)  printf("Dir_CW_Cycle\n");
23    if(Dir == Dir_CCW_Cycle) printf("Dir_CCW_Cycle\n"); 
25 }
26 void main (void)
27 {
28     test(Dir_CCW_Cycle);
29     test(Dir_CW_Cycle);
30 }

運行以后結果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM