int a = 10;
switch(a){
case 0:
printf("case 0");
break;
case 1:
printf("case 1");
break;
}
以上代码有效吗?
如果我确定int a
不会有除1和0之外的任何其他值,我可以避免default
吗?
如果在任何情况下某个值与1和0不同,该怎么办?
我知道这是一个愚蠢的问题,但我在想这可能是非法的或未定义的行为,所以我只是要求确认。
答案 0 :(得分:73)
代码有效。如果没有default:
标签且case
标签都不匹配“已切换”值,则不会执行任何受控复合语句。执行将从switch语句结束处继续。
ISO / IEC 9899:1999,第6.8.4.2节:
[...]如果没有转换的
case
常量表达式匹配且没有default
标签,则不会执行开关体的任何部分。
答案 1 :(得分:30)
正如其他人指出的那样,它是完全有效的代码。但是,从编码风格的角度来看,我更喜欢添加一个带有注释的空default
语句,以表明我并没有无意中忘记它。
int a=10;
switch(a)
{
case 0: printf("case 0");
break;
case 1: printf("case 1");
break;
default: // do nothing;
break;
}
使用/不使用default
生成的代码应该相同。
答案 2 :(得分:7)
这是完全合法的代码。如果a既不是0或1,那么将完全跳过开关块。
答案 3 :(得分:3)
没有default
案例是有效的。
然而,即使你确定你没有任何价值而不是1和0 ,最好有一个默认情况,以捕捉任何其他价值(虽然理论上不可能,它可能在某些情况下出现,如缓冲区溢出)并打印错误。
答案 4 :(得分:2)
是的,以上代码有效,
如果开关条件与案例的任何条件都不匹配且默认值不存在,则程序执行将从开关退出,而不执行任何操作。
答案 5 :(得分:2)
默认不是强制性的,但总是很好。理想的代码,但我们的生活不是,在那里提供保护没有害处。它还可以帮助您调试是否发生任何意外情况。
答案 6 :(得分:2)
使用C编程语言编写的switch语句的语法如下:
switch(expression) {
case constant-expression :
statement(s);
break; /* optional */
case constant-expression :
statement(s);
break; /* optional */
/* you can have any number of case statements */
default : /* Optional */
statement(s);
}
答案 7 :(得分:1)
如果条件匹配则不相同,否则不提供。
在交换机情况下,默认不是必需的。如果没有匹配的情况并且未提供默认值,则不会执行任何操作。