博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言注意事项——switch语句
阅读量:2394 次
发布时间:2019-05-10

本文共 981 字,大约阅读时间需要 3 分钟。

疑问一、关于switch语句有哪些要注意的地方?

    A1.default(如果有的话)可以出现在列表的任何位置,它在其他的case均无法匹配时被选中执行。(语句摘自《C专家编程》)

    A2.在每个switch语句中都放上一条default语句是个好习惯,因为这样做可以检测到任何非法值。(语句摘自《C和指针》)

    A3.switch default should never execute,simply assert.(摘自google c++编程规范)

——引申:养成把default语句放在最后的习惯,并在语句中加入assert(0)语句和printf+fflush信息用于调试。 但阅读代码时可能有程序员会把default语句放前面,这也有可能被执行,它是否被执行与default语句位置无关。

    B.语句从匹配表达式的case开始执行。语句摘自《C专家编程》)

        ——引申:不要在case之前加入语句,这些语句不会执行,但可以申明变量,不过最好也不要这么做,这些switch语句块作用域的变量声明和都要执行的语句最好放在swich语句之前,除非这些变量和语句只针对某种case。

     C.switch的另一个问题是它内部的任何语句都可以加上标签,并在执行时跳转到那里,这就有可能破坏程序流的结构化。语句摘自《C专家编程》)

        ——引申:若default这个词拼写错误,它会被误认为是标签,程序实际无法真正按照我们的想法进入相应的default语句。

     D.fall through:它不会在每个标签后面的语句执行完毕后自动中止。一旦执行某个case语句,程序将会依次执行后面所有的case,除非遇到break语句。(语句摘自《C专家编程》,《C陷阱与缺陷》中也强调说明这一行为)

       ——引申:每个case结尾都优先加入break语句防止遗漏,实际编写时若有需要再删去。

良好的一个switch语句用法:
switch(character) {  case 'A':    ... // 语句    break;  case 'B':    ... // 语句    break;  default:    PRINTVALUE;  // 语句,调试时输出值,其他情况下不执行(宏定义实现)    assert(0);  // 断言,调试时输出信息。}
 

转载地址:http://togab.baihongyu.com/

你可能感兴趣的文章
k8s-Building Large Clusters
查看>>
[转]stl 通用排序算法解析
查看>>
分布式存储系统GlusterFS初体验
查看>>
GlusterFS常用命令小结
查看>>
GlusterFS分布式文件系统使用简介
查看>>
Use Docker Engine plugins
查看>>
Using Gluster for a Distributed Docker Storage Volume
查看>>
有容云老司机带路, 使用Docker实现丝般顺滑的持续集成
查看>>
如何让Ubuntu系统支持WebP图片格式
查看>>
变态的静态资源缓存与更新(超详细好文)
查看>>
关于lvs均衡负载socket服务的配置实现
查看>>
Qt学习旅程(1)
查看>>
[转]CentOS 5.4挂载可读写NTFS
查看>>
SmartChineseAnalyzer的对中文开源社区是一大贡献
查看>>
[转]Apache Mahout 简介
查看>>
[转]分布式key-value存储方案介绍:Cassandra,LightCloud,TokyoCabinet
查看>>
[转]HDFS+MapReduce+Hive+HBase十分钟快速入门
查看>>
stdlib中的xmalloc,xfree,xinit_mempool
查看>>
关于Java Advanced Imaging(JAI)的一点积累
查看>>
Spirit越狱iPhone/iPod touch/iPad 3.1.3/3.2固件(Windows)
查看>>