c - 最后一个开关没必要?
问题描述
我正在思考我为 4 个互斥案例编写的 switch 语句。我在每个案例的末尾插入了一个 break 语句,因为我不想在一个案例或另一个案例成功后再次进行测试。
不过,这就是问题所在。如果有的话,最后一次休息会做什么?如果测试用例 43 成功,则 break 终止该案例,但如果没有 break,则默认值不应运行,因此无论如何都不会浪费测试。
这是代码:
switch(telemetry) {
case(40):
printf("\nHouse Telemetry #%i \n", psc);
break;
case(41):
printf("\nNav Telemetry #%i \n", psc);
break;
case(42):
printf("\nDownhill Telemetry #%i \n", psc);
break;
case(43):
printf("\nRealTime Telemetry #%i \n", psc);
break; // what do I do?
default:
printf("\nCommand ID not recognized\n");
}
也许你们中的一位编译器大师可以给我建议。
解决方案
如果您没有break;
in case 43,它将落入默认案例,并执行printf("\nCommand ID not recognized\n");
.
为什么你认为default
不会运行?switch-case 将继续执行,直到遇到break
语句,这包括该default
部分。
因此,所需的行为需要中断。
将 abreak;
放在 switch-case 的最后一个元素上(无论是default
还是case
)是可选的,因为它会停止即将结束的执行。
我遇到过对此有两种看法的程序员:在块的最后不应该有一个额外break
的,因为它没有必要,或者应该有一个为了一致性,以及这些部分得到重新的可能性- 安排在未来。
推荐阅读
- python - 尝试迭代和比较列表和字典中的值时出现类型错误
- amazon-web-services - 如何从 AWS 中的前缀恢复多个文件
- mule - 使用 dataweave 创建 xml 片段(即删除根元素)
- api - API中的函数自己进行系统调用还是API进行的系统调用由运行时支持系统中的系统调用接口辅助?
- javascript - 提供给 super() 的函数中的引用类实例
- c++ - 在 File 对象中创建指向第一个字符的指针
- html - 使用 VBA 获取 div 中的所有元素
- spring - Spring Batch - 使用 JobExecution 时获取属性文件值
- java - 删除多个列表中的重复元素java 8
- php - 会话数组在其父 while 循环之外打印时仅存储一个值