A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 每天进步一点点 中级黑马   /  2014-6-29 21:11  /  1418 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为甚么在case后面定义变量必须加上大括号  ,例如:
这样就会出错
  1. switch (1) {
  2.         case 1:
  3.          int a =8; // Expected expression
  4.             break;
  5.             case 2:
  6.             printf("haha");
  7.             break;
  8.         default:
  9.             break;
  10.     }
复制代码



4 个回复

倒序浏览
作用域,你的作用域有问题,既然从新定义了变量a那么就应该在第一个break后面加}
回复 使用道具 举报
改正代码如下
  1. switch (1)
  2. {
  3.     case 1:
  4.     {
  5.         int a =8; // Expected expression
  6.         break;
  7.     }
  8.     case 2:
  9.         printf("haha");
  10.         break;
  11.     default:
  12.         break;
  13. }
复制代码
回复 使用道具 举报
根据c标准,如果有一个case子句在变量a的作用域范围,那么整个switch的所有case和default子句都必须在a的作用域范围内。我的理解,这是避免声明a的case子句被跳过而到了一个未加声明直接使用a的case或default
回复 使用道具 举报
不加大括号,case后面的定义变量的作用域电脑会无法识别它的作用域是仅仅在case1还是以后所有就会报错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马