目录
一、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)匹配的意图不同。所以良好的代码习惯也是很重要的。
以上是两个简单的小错误,希望能引起你写代码时的警惕,也希望对你有所启发。感谢支持。