关于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 }

运行以后结果如下:

posted on 2017-12-17 13:07 迷糊同学 阅读() 评论() 编辑 收藏

版权声明:本文为mihu-96原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://www.cnblogs.com/mihu-96/p/8051827.html