C中switch语句的语法?

凯恩德

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

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

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

托马斯·乔治

(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;
    }
}

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章