switch statement (C language) – C 中文开发手册

[
  •   C 语言中文开发手册

    switch statement (C language) - C 中文开发手册
    根据整数参数的值执行代码。用于需要根据整数值执行许多代码分支中的一个或多个分支的情况。

    句法

    开关(表达式)语句
    表达 - 整数类型的任何表达式(char,signed或unsigned integer或枚举)
    声明 - 任何陈述(通常是复合陈述)。情况:和默认值:标签允许在声明中,并打破; 声明有特殊的含义。
    case constant_expression:语句 (1)
    默认:语句 (2)
    constant_expression - 任何整数常量表达式

    说明

    case:只要所有constant_expressions的值都是唯一的(在转换为提升的表达式类型之后),switch语句的主体可以具有任意数量的标签。最多default:只能有一个标签(尽管嵌套的开关语句可能使用自己的default:标签,或者case:标签的常数与封闭开关中使用的常数相同)。如果在转换为提升的表达式类型后,表达式求值为等于constant_expressions之一的值,那么控制权将转移到标有该constant_expression的语句。如果表达式计算出的值与任何case:标签都不匹配,并且default:标签存在,则控件将转移到标签标签所对应的语句中default:。如果表达式求值的值与任何case:标签都不匹配,且default:标签不存在,则不会执行任何开关主体。break语句在遇到语句中的任何地方时会退出switch语句:

    switch(1) {
        case 1 : puts("1"); // prints "1",
        case 2 : puts("2"); // then prints "2" ("fall-through")
    }
    switch(1) {
        case 1 : puts("1"); // prints "1"
                 break;     // and exits the switch
        case 2 : puts("2");
                 break;
    }
    与所有其他选择和迭代语句一样,switch语句建立块范围:表达式中引入的任何标识符在语句后超出范围。如果一个VLA或其他具有不同修改类型的标识符在其范围内有一个case或者default标签,则整个switch语句必须在其范围内(换句话说,VLA必须在整个交换机之前或之后最后一个标签):switch(expr){int i = 4; //不是VLA; 可以在这里声明f(i); //永远不会调用// int ai; //错误:这里不能声明VLA案例0:i = 17; 默认:; int ai; //可以在这里声明VLA printf(“%d \ n”,i); //如果expr == 0则打印17,否则打印不确定的值} (自C99以来)

    关键词

    switch, case, default.

    #include <stdio.h>
     
    void func(int x)
    {
       printf("func(%d): ", x);
       switch(x)
       {
          case 1: printf("case 1, ");
          case 2: printf("case 2, ");
          case 3: printf("case 3.\n"); break;
          case 4: printf("case 4, ");
          case 5: printf("case 5, ");
          default: printf("default.\n");
       }
    }
     
    int main(void)
    {
       for(int i = 1; i < 10; ++i) func(i);
    }

    输出:

    func(1): case 1, case 2, case 3.
    func(2): case 2, case 3.
    func(3): case 3.
    func(4): case 4, case 5, default.
    func(5): case 5, default.
    func(6): default.
    func(7): default.
    func(8): default.
    func(9): default.

    参考

    C11标准(ISO / IEC 9899:2011): 6.8.4.2 switch语句(p:149-150) C99标准(ISO / IEC 9899:1999): 6.8.4.2 switch语句(p:134-135) C89 / C90标准(ISO / IEC 9899:1990): 3.6.4.2 switch语句

  •   C 语言中文开发手册
    ]
    转载请保留页面地址:https://www.breakyizhan.com/c-3/28091.html

    posted on 2020-07-06 00:13  MrAit  阅读(165)  评论(0编辑  收藏  举报

    导航