如果我不在开关盒中写默认怎么办?

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()