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

时间:2011-11-05 15:56:44

标签: c switch-statement

int a = 10;
switch(a){
case 0:
    printf("case 0");
    break;
case 1:
    printf("case 1");
    break;
}

以上代码有效吗?

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

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

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

8 个答案:

答案 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)

如果条件匹配则不相同,否则不提供。

在交换机情况下,

默认不是必需的。如果没有匹配的情况并且未提供默认值,则不会执行任何操作。