C语言case语句 "case 1 ... 4:" 为什么可以运行?
试了一下如下代码:#include <stdio.h>
int
main(void)
{
int t1, t2;
printf("test start\n");
t1 = 3;
switch(t1)
{
case 1 ... 4:
printf("hit!\n");
break;
default:
printf("miss!\n");
break;
}
return 0;
}
在linux下使用gcc-4.4.7 编译运行ok,输出hit!。
请问这个 “case 1 ... 4:” 的语法是在哪里定义的?新的C标准中吗? 是GCC的扩展语法。 二楼猫哥对 还可以这样写啊,学习了 takashiki 发表于 2018-7-24 15:19
是GCC的扩展语法。
学习了 谢谢~ 顺便上传一下 刚才收到的gcc的51项扩充,其中5.21 Case Ranges 就是我遇到的问题 :-) 刚才上传的文件截取于 gcc 文档: https://gcc.gnu.org/onlinedocs/gcc-4.4.7/gcc/index.html#toc_C-Extensions,惭愧,手册看的还是太少 还可以这样,学习了。 确实这个扩展很方便 gamethink 发表于 2018-7-24 15:34
可惜MDK不支持(以前,现在不知道呢)
印象中一直都是支持的,一定是你打开方式不对……
Keil UV4中,在C/C++选项卡中,Misc Controls中填写--gnu就会支持GCC特性。Keil UV5我没用过但一定会支持的吧。 第一次看到有时间试一下。 可以用
case 1:
case 2:
case 3:
case 4: 这个好几年前就有了。论坛里也有过讨论。 学习了 这个让我想起了 百达翡丽广告语:没人能拥有百达翡丽,只不过为下一代保管而已!我想C语言也是这样的东西。 支持是支持,但是感觉会让代码的可移植性变得很差 松下PLC的ST语言也这样写 能不用就不要用,非标语法 本帖最后由 Victor2012 于 2018-7-27 09:05 编辑
case 1:;
case 2:;
case 3:;
case 4:
printf("hit!\n");
break;
default:
printf("miss!\n");
break; 学习了,第一次见到这种写法! takashiki 发表于 2018-7-24 15:19
是GCC的扩展语法。
学习了,多谢 才知道,学习了 Victor2012 发表于 2018-7-27 09:03
case 1:;
case 2:;
case 3:;
case 1:
case 2:
case 3:
case 4:
.
.
.
break;
不需要每个case后面的分号
页:
[1]