我在一次采访中被问到这个问题。我回答说这是一个条件构造,因为
- 它执行一次,不像循环可以执行多次。
- 没有循环控制机制,只有根据不同情况进行条件切换。
那么我的答案是对还是错,有更好的答案吗?
他还问我为什么break;
语句适用于 switch-case 的原因,因为break;
它只适用于循环。这个问题我无法回答。
在 C++ 中
switch
是selection-statement
n3376 6.4/1 和 6.4.2 大约switch
selection-statement:
...
switch ( condition ) statement
break
是jump-statement
n3376 6.6.1/1
break 语句只能出现在迭代语句或 switch 语句中,并导致最小的封闭迭代语句或 switch 语句终止;控制传递到终止语句之后的语句(如果有)。
C 答案
没有正式的术语称为“条件构造”。C 标准使用术语选择语句。C 语言具有三种不同的选择语句:if
和if-else
( switch
C11 6.8.4)。循环在迭代语句(6.8.5)类别下排序。
该break
语句是一个跳转语句,就像goto
. 它对允许出现的位置有一些限制:
C11 6.8.6.3
break 语句应仅出现在或作为 switch 主体或循环主体出现。
所以回答面试问题:
switch case 是循环还是条件构造?
如果您通过条件构造表示选择语句,那么是的,switch
是条件构造。
为什么要休息;语句与 switch-case 一起使用,因为,break; 仅适用于循环
不,问题不正确,它不仅适用于循环。它适用于switch
和循环。这是因为 C 语言是这样定义的(6.8.6.3)。
switch case 是一种包装指令块并执行(部分)指令的方式,从这里开始到这里结束。匹配case
标记开始,以下break
标记结束。
该块可能是一些指令:
{
instruction_A;
instruction_B;
instruction_C;
instruction_D;
}
这些case
语句说明了根据switch
值动态从哪里开始:
switch(value)
{
case one:
instruction_A;
instruction_B;
case two:
instruction_C;
case three:
instruction_D;
}
万一one
,所有指令都将被调用,因为没有中断。two
如果没有异常(c ;.
这些break
陈述说明了在哪里停止,并且意味着可以省略一些案例陈述:
switch(value)
{
case one:
instruction_A;
instruction_B;
case two:
instruction_C;
break;
case three:
instruction_D;
}
Caseone
现在将执行 A、B 和 C,但不执行 D。