我试图理解C中的switch语句(我正在使用Ubuntu v16.04中的gcc)。我能够理解它的语义,但是对它的语法有以下两个问题:
在阅读了一些使用switch语句的示例后,我注意到有时大小写后的符号有时包含在内''
,有时没有。例如:case 1
或case 'a'
。我检查了Linux手册页中的switch语句(https://linux.die.net/man/1/switch),那里没有使用''作为字符串。所以我不知道该怎么办。
有时,单个案例中的代码块用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] 删除。
我来说两句