switch语句中为什么少了一个break会执行下面一个case里面的东西

zjtzlqr 2013-04-07 07:35:12
#include "stdio.h"
#define u8 unsigned char
int main(void)
{
u8 i;
i=0;
switch(i)
{
case 0:
printf("a\n");

case 1:
printf("b\n");
break;

case 2:
printf("c\n");
break;

default:
printf("d\n");
break;
}
return 1;
}

为什么结果是
a
b

case不是需要满足i==1才会执行printf("b\n")吗?
...全文
6258 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
CandPointer 2013-04-09
  • 打赏
  • 举报
回复
switch ,各种case 贯穿下去.是很好的. 经典应用: 达夫设备
赵4老师 2013-04-09
  • 打赏
  • 举报
回复
引用 7 楼 Inhibitory 的回复:
王八的屁股呗,没什么好纠结的
赞同!
renren_renren 2013-04-09
  • 打赏
  • 举报
回复
因为break作用就是结束循环,在没有break的时候,只要遇到符合条件的语句就会一直执行下去
Henryinferno 2013-04-08
  • 打赏
  • 举报
回复
百度switch的话就有。。
常如意 2013-04-08
  • 打赏
  • 举报
回复
没有break跳出函数的话,程序继续向下执行到遇到break
mujiok2003 2013-04-08
  • 打赏
  • 举报
回复
这是有意设计的,不同的case可以共享代码。 switch(status){ case error: case warn: case ng: //log it break; default: break; }
Athenacle_ 2013-04-08
  • 打赏
  • 举报
回复
引用 5 楼 huanfengyun 的回复:
switch会从满足条件的地方开始执行,直到遇到break;语句或执行完switch语句为止.这程序另我感到很纠结的是:为什么你定义一了个常量但又不直接赋值?而是到程序中才赋值,这种习惯好像不太好,宏定义不是这么用的.而且default语句是switch块的结束语句,后面跟上break;语句几乎没有什么用的.
谁说default是switch块的结束语句的啊? 请看4L
引用 4 楼 ForestDB 的回复:
case只是label的一种。
再看代码

int i = 0;
switch (i)
{
   default:
     ;//跳到哪里了??
   case 2:
    ;//
   case 1:
    ;//
Inhibitory 2013-04-08
  • 打赏
  • 举报
回复
王八的屁股呗,没什么好纠结的
Athenacle_ 2013-04-08
  • 打赏
  • 举报
回复
这是一个历史问题。
jiandingzhe 2013-04-08
  • 打赏
  • 举报
回复
这是语言特性。
wizard_tiger 2013-04-08
  • 打赏
  • 举报
回复
这只是说C语言中就这样规定的,没必要纠结.
Storm-Shadow 2013-04-07
  • 打赏
  • 举报
回复
switch会从满足条件的地方开始执行,直到遇到break;语句或执行完switch语句为止.这程序另我感到很纠结的是:为什么你定义一了个常量但又不直接赋值?而是到程序中才赋值,这种习惯好像不太好,宏定义不是这么用的.而且default语句是switch块的结束语句,后面跟上break;语句几乎没有什么用的.
ForestDB 2013-04-07
  • 打赏
  • 举报
回复
case只是label的一种。
zhcosin 2013-04-07
  • 打赏
  • 举报
回复 1
这是当初编译器实现 switch 语句的失误,那个标志只匹配一次,匹配到哪一个 case 就闷头闷脑的往下执行,直到遇到 break 或者到达 switch 语句的结尾花括号,所以我们不得不在每一个 case 的结尾手工写上 break,忍忍吧,编译器要做到我们所想的那样也没有什么技术障碍,只是现在大量的编译器都是这么做的,大多数程序也是这样写的,要改也太晚了。
大极张三疯 2013-04-07
  • 打赏
  • 举报
回复
case 0: printf("a\n"); 后面没有跟break;程序继续向下执行到遇到break
a784063999 2013-04-07
  • 打赏
  • 举报
回复
如果case 0沒有break會繼續執行下行不理是否=1

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧