bsb_f_gyf 发表于 2018-7-24 15:13:33

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标准中吗?

takashiki 发表于 2018-7-24 15:19:12

是GCC的扩展语法。

WM_CH 发表于 2018-7-24 15:26:21

二楼猫哥对

arm 发表于 2018-7-24 15:28:46

还可以这样写啊,学习了

bsb_f_gyf 发表于 2018-7-24 15:29:33

takashiki 发表于 2018-7-24 15:19
是GCC的扩展语法。

学习了 谢谢~

bsb_f_gyf 发表于 2018-7-24 15:34:29

顺便上传一下 刚才收到的gcc的51项扩充,其中5.21 Case Ranges 就是我遇到的问题 :-)

bsb_f_gyf 发表于 2018-7-24 15:39:09

刚才上传的文件截取于 gcc 文档: https://gcc.gnu.org/onlinedocs/gcc-4.4.7/gcc/index.html#toc_C-Extensions,惭愧,手册看的还是太少

security 发表于 2018-7-24 15:57:17

还可以这样,学习了。

makesoft 发表于 2018-7-24 15:58:57

确实这个扩展很方便

takashiki 发表于 2018-7-24 16:09:02

gamethink 发表于 2018-7-24 15:34
可惜MDK不支持(以前,现在不知道呢)

印象中一直都是支持的,一定是你打开方式不对……
Keil UV4中,在C/C++选项卡中,Misc Controls中填写--gnu就会支持GCC特性。Keil UV5我没用过但一定会支持的吧。

GUOHUDONG 发表于 2018-7-24 17:08:37

第一次看到有时间试一下。

wzda_gundam 发表于 2018-7-24 17:25:45

可以用
case 1:
case 2:
case 3:
case 4:

Excellence 发表于 2018-7-24 17:28:59

这个好几年前就有了。论坛里也有过讨论。

panly 发表于 2018-7-24 17:38:42

学习了

leiyitan 发表于 2018-7-24 20:07:47

这个让我想起了 百达翡丽广告语:没人能拥有百达翡丽,只不过为下一代保管而已!我想C语言也是这样的东西。

cloudboy 发表于 2018-7-24 20:53:05

支持是支持,但是感觉会让代码的可移植性变得很差

ylei12 发表于 2018-7-24 21:59:04

松下PLC的ST语言也这样写

chenliangliang_ 发表于 2018-7-27 08:56:34

能不用就不要用,非标语法

Victor2012 发表于 2018-7-27 09:03:31

本帖最后由 Victor2012 于 2018-7-27 09:05 编辑

    case 1:;
    case 2:;
    case 3:;
    case 4:
      printf("hit!\n");
      break;
    default:
      printf("miss!\n");
      break;

bobo89 发表于 2018-7-27 10:53:04

学习了,第一次见到这种写法!

yick 发表于 2018-7-29 11:15:17

takashiki 发表于 2018-7-24 15:19
是GCC的扩展语法。

学习了,多谢

jackee 发表于 2018-7-29 11:32:30

才知道,学习了

makesoft 发表于 2018-7-29 11:39:22

Victor2012 发表于 2018-7-27 09:03
case 1:;
    case 2:;
    case 3:;


case 1:
case 2:
case 3:
case 4:
.
.
.
break;



不需要每个case后面的分号
页: [1]
查看完整版本: C语言case语句 "case 1 ... 4:" 为什么可以运行?