【发布时间】:2019-09-28 19:35:40
【问题描述】:
我试图理解 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 手册页没有提到这一点。有人可以澄清一下吗?
【问题讨论】:
-
使用
case 1:查找等于1的switch 表达式。使用case '1':查找开关表达式等于字符'1'的代码点,这通常等同于(但比case 49:更清晰)。 -
case 标签后的大括号是可选的,但如果您想在之后立即声明变量,则这是必需的——您不能标记变量声明。在 C99 或更高版本中,您可以在 case 标签之后的语句序列中间声明变量,但不使用大括号这样做会对变量的范围产生有趣的影响。
-
switch的 linux 手册页与 C 语言没有任何关系。 -
注意
'a'不是字符串,而是int类型的单个字符。在 C 中,您不能将字符串用于case语句。 -
如果你想看看 switch 语句的一些奇怪用法,看看 Duff 的设备。
标签: c switch-statement