如果我不在开关盒中写默认怎么办?
int a = 10; switch(a){ case 0: printf("case 0"); break; case 1: printf("case 1"); break; }
以上代码有效吗?
如果我确定int a
没有除1和0之外的任何其他值,我可以避免default
吗?
如果在任何情况下一个值与1和0不同怎么办?
我知道这是一个愚蠢的问题,但我在想,也许这将是非法的或未定义的行为,所以我只是要求确认。
代码有效。 如果没有default:
label且没有case
标签与“切换”值匹配,则不会执行任何受控复合语句。 执行将从switch语句结束继续。
ISO / IEC 9899:1999,第6.8.4.2节:
[…]如果没有转换的
case
常量表达式匹配并且没有default
标签,则不会执行开关主体的任何部分。
正如其他人指出的那样,它是完全有效的代码。 但是,从编码风格的角度来看,我更喜欢添加一个空的default
语句和注释,以明确我没有无意中忘记它。
int a=10; switch(a) { case 0: printf("case 0"); break; case 1: printf("case 1"); break; default: // do nothing; break; }
使用/不使用default
生成的代码应该相同。
这是完全合法的代码。 如果a既不是0或1,那么将完全跳过开关块。
没有default
情况是有效的。
但是, 即使你确定你没有任何值而不是1和0 ,最好有一个默认情况,以捕获任何其他值(虽然理论上不可能,但在某些情况下可能会出现,比如缓冲区溢出)并打印错误。
是的,上面的代码是有效的,
如果开关条件与情况的任何条件都不匹配并且不存在默认值,程序执行将从开关退出而不做任何事情。
默认不是强制性的,但总是很好。 理想的代码,但我们的生活不是,在那里提供保护没有害处。 它还可以帮助您调试是否发生任何意外情况。
如果条件匹配则不相同,否则不提供。
在switch案例中,default不是必需的。 如果没有匹配的情况并且未提供默认值,则不会执行任何操作。
我建议使用default:
在每个switch
的末尾,如下面的代码中所示。
最好有一个default:
case,因为如果a的值是错误的,你可以警告用户。
int a = 10; switch(a) { case 0: printf("case 0"); break; case 1: printf("case 1"); break; default: //do nothing; break; }
但它仍然可以在没有default:
运行default:
与if语句一样,你可以运行if()
而不使用else()
。