首页 > 编程笔记 > C语言笔记

c语言case后面可以写多个值吗?

在C语言中,switch-case 语句是一种常用的流程控制结构,用于根据一个表达式的值来执行不同的代码块。关于 case 后面是否可以写多个值这个问题,答案是肯定的,但需要注意一些细节。


在传统的C语言标准(如 C89/C90)中,每个 case 标签后面只能跟随一个常量表达式。然而,从 C99 标准开始,C语言引入了一个新特性,允许在一个 case 标签中使用多个值,这被称为“case 范围”或“case 列表”。


让我们深入探讨这两种情况:

1. 传统方式:每个 case 一个值

在传统的C语言中,如果我们想要多个值执行相同的代码块,我们需要为每个值单独写一个 case 语句。例如:

#include <stdio.h>

int main() {
    int day = 3;
    
    switch(day) {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("It's a weekday\n");
            break;
        case 6:
        case 7:
            printf("It's the weekend\n");
            break;
        default:
            printf("Invalid day\n");
    }
    
    return 0;
}
输出结果:
It's a weekday

在这个例子中,我们为工作日(1-5)和周末(6-7)分别设置了多个 case。虽然这种方法有效,但当需要处理的值很多时,代码可能会变得冗长。

2. C99 及以后:case 范围

从 C99 标准开始,C语言允许我们在一个 case 标签中指定一个范围的值,这大大简化了处理连续值的代码。语法如下:

case 低值 ... 高值:
    // 代码块

让我们用这种新语法重写前面的例子:

#include <stdio.h>

int main() {
    int day = 3;
    
    switch(day) {
        case 1 ... 5:
            printf("It's a weekday\n");
            break;
        case 6 ... 7:
            printf("It's the weekend\n");
            break;
        default:
            printf("Invalid day\n");
    }
    
    return 0;
}
输出结果:
It's a weekday

这种写法更加简洁,而且更容易理解和维护。需要注意的是,这个特性是 C99 标准引入的,因此在使用时要确保你的编译器支持 C99 或更高版本的 C 标准。


使用 case 范围需要注意以下几点:

  1. 编译器支持:并非所有编译器都支持 case 范围语法,使用前请检查你的编译器版本和设置。
  2. 可读性:虽然 case 范围可以使代码更简洁,但在某些情况下,明确列出每个值可能更有利于代码的可读性。
  3. 重叠范围:避免在不同的 case 语句中使用重叠的范围,这可能导致意外的行为。
  4. 数据类型:case 范围主要用于整数类型,对于其他类型(如字符),支持可能因编译器而异。
  5. 性能考虑:对于小范围的值,使用 case 范围通常不会影响性能。但对于大范围的值,传统的 if-else 结构可能更高效。


总之,C语言确实允许在 case 后面写多个值,无论是通过传统的多个 case 语句,还是使用 C99 引入的 case 范围语法。选择哪种方式取决于你的具体需求、代码可读性考虑以及编译器支持情况。

相关文章