C中switch语句的语法?

问题描述 投票:2回答:4

我正在尝试理解C中的switch语句(我正在使用Ubuntu v16.04中的gcc)。我能够理解它的语义,但是对它的语法有以下两个问题:

  1. 我在阅读了一些switch语句用法示例后发现,大小写后的符号有时包含在''中,有时没有。例如:case 1case 'a'。我检查了Linux手册页中的switch语句(https://linux.die.net/man/1/switch),但那里没有使用''作为字符串。所以我不知道该怎么办。

  2. 有时,单个案例中的代码块包含在{ }中,有时却没有。我之前已经读过,多行语句需要包含在{ }中,但不一定要像for循环中那样包含单行语句,而单行语句中则是while循环,等等。但是有时case语句中有1行代码(例如a *= 5;)后跟break语句(因此共有2条语句),但两行都未包含在{ }中。 Linux手册页没有提到这一点。有人可以澄清吗?

c switch-statement
4个回答
2
投票

(1)'a'是ascii值97。Ascii是一种编码字符的标准方法,它也在许多其他语言中使用。本质上,每个字符都表示为一个数值。因此,当您有:

...
case 'a':
...

您实际上是在以下情况下执行代码,如果switch变量等于97。在您的示例中:

case '1':

检查开关变量是否等于char'1',即ascii值49。

((2)用大括号括起来的case语句会更改大括号之间的变量范围。考虑以下示例:

switch (sw) {
    case 1:
        int b = 2;
        sw += b;
        break;
    case 2:
        int b = 3;
        sw += b;
        break;
    default:
        break;
}

这是因为在情况1和情况2中,您实例化了一个称为“ b”的整数。由于两个case语句都在同一变量范围内(switch语句的范围),因此编译器会给您一个错误,因为您实例化了具有相同名称和两次的变量。现在考虑下面的代码:

    switch (sw) {
    case 1: {
        int b = 2;
        sw += b;
        break;
    } case 2: {
        int b = 3;
        sw += b;
        break;
    } default: {
        break;
    }
}

此代码进行编译。通过将每个案例的代码括在花括号中,可以为每个案例提供自己的变量范围,在此范围内可以在每个范围中重新定义相同的变量。]​​>


2
投票

要回答您的问题:q1:1和“ 1”不相同。后者被单引号引起来,在C中始终表示一个字符。根据C的实现,此字符将以ASCII格式存储,并以数字表示49。将ASCII格式的字符看作是可以数字表示的功能,但数字不是,比较'1' == 1是合法的,因为该字符将被隐式转换为整数。


1
投票

((1)您在询问有关C语言中的switch语句(特别是gcc)的信息,但是您所包含的链接用于Linux shell中的switch语句。这是两种不同的语言!在C语言中,单引号''用于字符。字符是单个字母/数字/符号/等,而不是一个或多个字符的字符串。因此,case 1:将匹配数字1,而case '1':将匹配字符“ 1”。数字的类型如int或long。字符的类型为char。因此,是否使用“”取决于您要匹配的是字符还是数字。


1
投票

[C中没有用于switch的手册页。您正在查看的是switch命令的手册页(按照名称中的(1),完全不同。

© www.soinside.com 2019 - 2024. All rights reserved.