当前位置:网站首页>case 关键字后面的值有什么要求吗?
case 关键字后面的值有什么要求吗?
2022-07-06 14:40:00 【是北豼不太皮吖】
switch(variable)
{
case Value1:
//program code
break;
case Value2:
//program code
break;
case Value3:
//program code
break;
…
default:
break;
}
1.每个 case 语句的结尾绝对不要忘了加 break,否则将导致多个分支重叠(除非有意使多个分支重叠)。
2.最后必须使用 default 分支。即使程序真的不需要 default 处理,也应该保留语句:
default:
break;
这样做并非画蛇添足,可以避免让人误以为你忘了 default 处理。
case 关键字后面的值有什么要求吗?
case 后面只能是整型或字符型的常量或常量表达式(想想字符型数据在内存里是怎么存的)。
字符常量是指用一对单引号括起来的一个字符。如‘a’,‘9’,‘!’。一般作为整型数据来进行运算。
常量表达式是指值不会改变并且在编译过程中就能得到计算结果的表达式
常量表达式就是表达式里面只有常量的式子,比如1+2是常量表达式,如果定义a为常量1,那么a+2也是常量表达式。如果定义变量a,那么a+2就不是常量表达式。n=5是常量表达式。
字符型数据在内存里是怎么存的?
字符型数据在内存中储存的是它的ASCII码值,它是一个字节,所有数据类型在内存中都是以0和1代码二进制储存的,这个原则不会变。
在C语言中,char型数据是将一个字符常量放到一个字符变量中,并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。
编码中,一个汉字字符存储需要2个字节。在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。在UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节。在UTF-32编码中,世界上任何字符的存储都需要4个字节。
case语句的排列顺序
如果 case 语句很少,你也许可以忽略这点,但是如果 case 语句非常多,那就不得不好好考虑这个问题了。比如你写的是某个驱动程序,也许会经常遇到几十个 case 语句的情况。一般来说,我们可以遵循下面的规则:
1.按字母或数字顺序排列各条 case 语句。
如果所有的 case 语句没有明显的重要性差别,那就按 A-B-C 或 1-2-3 等顺序排列 case语句。这样做的话,你可以很容易的找到某条 case 语句。
switch(variable)
{
case A:
//program code
break;
case B:
//program code
break;
case C:
//program code
break;
…
default:
break;
}
2.把正常情况放在前面,而把异常情况放在后面。
如果有多个正常情况和异常情况,把正常情况放在前面,并做好注释;把异常情况放在后面,同样要做注释。
switch(variable)
{
///
//正常情况开始
case A:
//program code
break;
case B:
//program code
break;
//正常情况结束
//
//异常情况开始
case -1:
//program code
break;
//异常情况结束
//
…
default:
break;
}
3.按执行频率排列 case 语句。
把最常执行的情况放在前面,而把最不常执行的情况放在后面。最常执行的代码可能也是调试的时候要单步执行的最多的代码。如果放在后面的话,找起来可能会比较困难,而放在前面的话,可以很快的找到。
使用 case 语句的其他注意事项
1.简化每种情况对应的操作。
使得与每种情况相关的代码尽可能的精炼。case 语句后面的代码越精炼,case 语句的结果就会越清晰。你想想,如果 case 语句后面的代码整个屏幕都放不下,这样的代码谁也难看得很清晰吧。如果某个 case 语句确实需要这么多的代码来执行某个操作,那可以把这些操作写成一个或几个子程序,然后在 case 语句后面调用这些子程序就 ok 了。一般来说 case语句后面的代码尽量不要超过 20 行。
2.不要为了使用 case 语句而刻意制造一个变量。
为了使用 case 而刻意构造出来的变量很容易把人搞糊涂,应该避免这种变量。
char action = a[0];
switch (action)
{
case ‘c’:
fun1();
break;
case ‘d’:
break;
…
default:
break;
}
这里控制 case 语句的变量是 action。而 action 的值是取字符数组 a 的一个字符。但是这种方式可能带来一些隐含的错误。一般而言,当你为了使用 case 语句而刻意去造出一个变量时,真正的数据可能不会按照你所希望的方式映射到 case 语句里。在这个例子中,如果用户输入字符数组 a 里面存的是“const”这个字符串,那么 case 语句会匹配到第一个 case上,并调用 fun1()函数。然而如果这个数组里存的是别的以字符 c 开头的任何字符串(比如:“col”,“can”),case 分支同样会匹配到第一个 case 上。但是这也许并不是你想要的结果,这个隐含的错误往往使人抓狂。
3.把 default 子句只用于检查真正的默认情况。
有时候,你只剩下了最后一种情况需要处理,于是就决定把这种情况用 default 子句来处理。这样也许会让你偷懒少敲几个字符,但是这却很不明智。这样将失去 case 语句的标号所提供的自说明功能,而且也丧失了使用 default 子句处理错误情况的能力。所以,奉劝你不要偷懒,老老实实的把每一种情况都用 case 语句来完成,而把真正的默认情况的处理交给 default 子句。
边栏推荐
- UNI-Admin基础框架怎么关闭创建超级管理员入口?
- 【数字IC手撕代码】Verilog无毛刺时钟切换电路|题目|原理|设计|仿真
- Oracle Performance Analysis 3: introduction to tkprof
- Unity3d Learning Notes 6 - GPU instantiation (1)
- Oracle-控制文件及日志文件的管理
- Force buckle 575 Divide candy
- RESNET rs: Google takes the lead in tuning RESNET, and its performance comprehensively surpasses efficientnet series | 2021 arXiv
- GPS from getting started to giving up (12), Doppler constant speed
- 基于 QEMUv8 搭建 OP-TEE 开发环境
- 414. The third largest digital buckle
猜你喜欢
labelimg的安装与使用
自制J-Flash烧录工具——Qt调用jlinkARM.dll方式
About the professional ethics of programmers, let's talk about it from the way of craftsmanship and neatness
墨西哥一架飞往美国的客机起飞后遭雷击 随后安全返航
[10:00 public class]: basis and practice of video quality evaluation
BarcodeX(ActiveX打印控件) v5.3.0.80 免费版使用
[leetcode daily clock in] 1020 Number of enclaves
Notes de développement du matériel (10): flux de base du développement du matériel, fabrication d'un module USB à RS232 (9): création de la Bibliothèque d'emballage ch340g / max232 SOP - 16 et Associa
Attack and defense world miscall
Crawler obtains real estate data
随机推荐
414. The third largest digital buckle
【sdx62】WCN685X将bdwlan.bin和bdwlan.txt相互转化操作方法
3DMax指定面贴图
插入排序与希尔排序
剪映+json解析将视频中的声音转换成文本
Oracle Performance Analysis 3: introduction to tkprof
Mise en place d'un environnement de développement OP - tee basé sur qemuv8
中国VOCs催化剂行业研究与投资战略报告(2022版)
每日一题:力扣:225:用队列实现栈
Xiaoman network model & http1-http2 & browser cache
12、 Start process
重磅新闻 | Softing FG-200获得中国3C防爆认证 为客户现场测试提供安全保障
GPS from getting started to giving up (XV), DCB differential code deviation
CCNA Cisco network EIGRP protocol
Applet system update prompt, and force the applet to restart and use the new version
2020 Bioinformatics | GraphDTA: predicting drug target binding affinity with graph neural networks
[leetcode daily clock in] 1020 Number of enclaves
Build op-tee development environment based on qemuv8
QT | UDP broadcast communication, simple use case
Lora sync word settings