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

Jee*_*tel 44 c switch-statement

int a = 10;
switch(a){
case 0:
    printf("case 0");
    break;
case 1:
    printf("case 1");
    break;
}
Run Code Online (Sandbox Code Playgroud)

以上代码有效吗?

如果我确定int a不会有除1和0之外的任何其他值,我可以避免default吗?

如果在任何情况下一个值与1和0不同怎么办?

我知道这是一个愚蠢的问题,但我在想,也许这将是非法的或未定义的行为,所以我只是要求确认.

CB *_*ley 80

代码有效.如果没有default:标签且没有case标签与"已切换"值匹配,则不会执行任何受控复合语句.执行将从switch语句结束处继续.

ISO/IEC 9899:1999,第6.8.4.2节:

[...]如果没有转换的case常量表达式匹配且没有default标签,则不执行开关体的任何部分.


Pra*_*ian 31

正如其他人指出的那样,它是完全有效的代码.但是,从编码风格的角度来看,我更喜欢添加一个default带有注释的空语句,以表明我并没有无意中忘记它.

int a=10;
switch(a)
{
case 0: printf("case 0");
         break;
case 1: printf("case 1");
         break;
default: // do nothing;
         break;
}
Run Code Online (Sandbox Code Playgroud)

使用/不使用生成的代码default应该相同.

  • 如果你打算处理枚举中的所有情况,我建议*省略*默认情况,因为大多数编译器会在switch语句中忘记枚举情况时发出警告. (3认同)

drd*_*cox 7

这是完全合法的代码.如果a既不是0或1,那么将完全跳过开关块.