我试图理解 C 中的 switch 语句(我使用的是 Ubuntu v16.04 中的 gcc)。我能够理解它的语义,但对其语法有以下两个问题:
在阅读了一些 switch 语句的用法示例后,我注意到 case 之后的符号有时包含在
''
中,有时则不然。 例如:case 1
或case 'a'
。 我检查了 Linux 联机帮助页中的 switch 语句 ( https://linux.die.net/man/1/switch ),他们没有使用 ' ' 作为字符串。所以我不知道该怎么办。有时单个案例中的代码块包含在
{ }
中,有时则不是。我之前读过,多行语句需要包含在{ }
中,但对于单行语句则不一定,如 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/