c - 当我们不在switch语句中使用'break'语句时,为什么在其他低于'default'的情况之前评估'deafult'?
问题描述
昨天我看到了下面的代码。正如您所看到的,它没有任何break
我预测它会打印“354”,因为我认为该default
部分最终会被评估(在检查所有案例之后)。
但这实际上并不正确,因为它打印了“345”。有人可以解释原因吗?
int main ()
{
int a = 2;
switch (2*a-1)
{
case 1: printf ("1");
case 2: printf("2");
case 3: printf("3");
default: printf("4");
case 5: printf("5");
}
}
解决方案
由于2*a-1
是 3,代码跳转到case 3
标签并从那里继续运行。其他标签被忽略,因为没有代码跳转到它们。仅当 中的值与任何标签都不匹配时,default
才会跳转到该标签。switch
case
推荐阅读
- java - 使用Jsoup为Android studio提取数据
- react-native - redux thunk 中的 AsyncStorage,操作未调度
- mysql - 如何使用 mySQL 将两列 ID 转换为两列名称?
- java - 如何确定 Java 应用程序的主类?
- android - 带有标题的 Xamarin android 弹出菜单
- hibernate - Spring Rest Data 投影@OneToOne 属性未加载
- java - 使用 @component 定义 bean 并从 XML 读取 List 时出错
- jsonschema - 一个属性的 json 模式依赖于另一个属性的值
- vba - 如何在 VBA 中选择随机单元格?
- javascript - es6 语法括号使这个简短但无法理解