c - C中switch语句的语法?

标签 c switch-statement

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

  1. 在阅读了一些 switch 语句的用法示例后,我注意到 case 之后的符号有时包含在 '' 中,有时则不然。 例如:case 1case 'a'。 我检查了 Linux 联机帮助页中的 switch 语句 ( https://linux.die.net/man/1/switch ),他们没有使用 ' ' 作为字符串。所以我不知道该怎么办。

  2. 有时单个案例中的代码块包含在 { } 中,有时则不是。我之前读过,多行语句需要包含在 { } 中,但对于单行语句则不一定,如 for 循环、while 循环和单行语句等。但有时case 语句有 1 行代码(例如 a *= 5;)后跟 break 语句(所以总共有 2 条语句),但这两行都没有包含在 { }。 Linux 联机帮助页没有提到这一点。有人可以澄清一下吗?

最佳答案

(1) 'a' 是 ascii 值 97。Ascii 是编码字符的标准方式,它也用于许多其他语言。本质上,每个字符都表示为一个数值。所以当你有:

...
case 'a':
...

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

case '1':

检查 switch 变量是否等于 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;
    }
}

此代码编译。通过将每个案例的代码括在大括号中,您为每个案例提供了自己的变量范围,它可以在每个范围内重新定义一次相同的变量。

关于c - C中switch语句的语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58149682/

相关文章:

c - 为什么此示例代码在 Linux 上没有发出信号?

java - switch 语句不切换

javascript - if/else 语句代替 switch

c - 有没有不需要linux内核的libc项目

c - 如何将 char 转换为以 uint8_t 形式存储的 hex?

sql - 在Where子句中添加Case语句

delphi - Delphi:3个工具按钮-3帧=切换

Ruby on Rails 开关

c - 如何在for循环中使用random_shuffle来实现不同的不同洗牌数组?

c - 从c中的文件填充指针数组