C经典书籍笔记——C陷阱与缺陷②(Switch+‘‘悬挂‘‘else)

目录

       一、switch的“顺序执行”

  1.缺点

  2.优点

案例1.

案例2.

二、悬挂else


一、switch的“顺序执行”

1.缺点

看以下代码:

switch(colour)
{
case 1:printf("red");
case 2:printf("yellow");
case 3:printf("blue");
}

若colour的值为2,很显然结果为yellowblue,正是因为switch语句按顺序依次执行case内容。程序员在设计代码时忘记break时,就会产生bug。

2.优点

这种特性虽然具有缺点,但也是switch独特的优势,可以表达其他方式难以方便描述的结构,正如下面两个例子:

案例1.

我们可以假想一种编译器,只需通过switch语句将第二个操作数变号,加减本质是一样的

……
case SUBTRACT:b=-b;
case add: sum=a+b

案例2.

设计下面一段代码,他的作用是在查找符号时自动跳过空白字符(空格键,制表符,换行符):

……
case '\n':linecount++;
          /此处没有break/
case '\t':linecount++;
case ' ':linecount++;

这样充分显示switch在解决多情况时的便捷。


二、悬挂else

规律总结:else始终与同一对括号内最近的为匹配的if配对

看下面一个例子就明白了

if(i==0){
      if(y==0)
        error();
else
   {
      z=x+y
      f(z);
}
}
if(i==0){
      if(y==0)
        error();
      else
      {
       z=x+y
       f(z);
      }
}

以上极具迷惑性的代码本质是,或许与作者else与if(i==0)匹配的意图不同。所以良好的代码习惯也是很重要的。


以上是两个简单的小错误,希望能引起你写代码时的警惕,也希望对你有所启发。感谢支持。

猜你喜欢

转载自blog.csdn.net/whc18858/article/details/120155979