C语言switch-case语句的范围表示

文章介绍了GCC编译器对C语言switch语句的一个拓展,允许case后面接一个范围,提供了更灵活的条件判断。例如,在评分系统中,通过范围case可以直接根据分数给出等级,而无需使用if-else。此外,文章还提到了GCC的其他拓展,如零长度数组、typeof关键字和可变参数宏等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

switch语句的GCC拓展

一般的C语言规范中我们认为case语句后面紧跟着就是整形数据,但是在gcc/g++中case语句后面可以接一个范围,其语法如下:

switch(data)
{
	case low_1 ... hight_1 : func1(); break;
	case low_2 ... hight_2 : func2(); break;
	……
	default : funcDefault(); break;
}

可能出现的错误

注意:

  • 如果有以下的报错,可能是你的编译器不是gcc/g++

error: too many decimal points in number

  • 如果有以下的错误,那么你的参数值可能有重复

error: duplicate (or overlapping) case value

  • 如果有以下的错误,那么你的第一个参数与英文句号之间没有空格

error: expected ‘:’ or ‘…’ before numeric constant

举例

以下是一个输入成绩出现评分的例子,如果是标准C语言,我们想要实现它只有通过if-else语句实现,如果使用gcc编译器的话现在使用switch-case语句就可以实现了。并且由于switch语句使用的是压栈的方式进行,在处理多层数据的时候表现要优于if-else语句,当然如果只有以下的4层结构使用if-else在代码的执行上更有优势,但是使用switch-case语句在代码表现上更加好看。

#include<stdio.h>

int main() {
    float score;
    int grade;
    scanf("%f",&score);
    printf("Your Grade:");
    grade = (int) score;
    switch(grade)
    {
        case 85 ... 100:printf("A\n");break;
        case 70 ... 84:printf("B\n");break;
        case 61 ... 69:printf("C\n");break;
        case 0 ... 60:printf("D\n");break;
        default : printf("ERROR\n");
    }
    return 0;
}

GCC的其余拓展

当然 GNU c 标准还支持了其他拓展,例如:

  1. 允许零长度数组
  2. 语句表达式
  3. typeof关键字
  4. 可变参数的宏
  5. 标号元素
    ……

以上列举了一些特殊的拓展,大家有兴趣的话可以自己去看一下 GNU C 的语法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值