如果没有默认情况,交换机会做什么?

时间:2013-03-17 15:28:30

标签: c switch-statement

我找到了以下代码:

switch(val){
    case 0:
        // some actions
       break;
    case 1:
        // some actions
       break;
    case 2:
        // some actions
       break;
}

但是,对于例如val = 10

的情况,会发生什么情况还不够清楚

我试图在一个程序中测试这段代码的值不正确,没有任何反应 - 程序正常退出。

此代码是否会导致任何潜在错误?有没有保证什么都不会发生?

3 个答案:

答案 0 :(得分:6)

它无所事事,无论如何都不会进入。

建议在default语句中使用switch子句作为最后一个子句。如果忘记Lint子句,default等程序会发出警告。有关信息请注意,default中需要MISRA-C子句。

编辑:

我个人更喜欢它是最后的条款,但我认为最重要的是最终条款的存在。为什么我更喜欢它作为最后一个条款是因为最小惊讶的原则:人们习惯把它看成是最后一个条款所以我认为它简化了程序阅读。

正如我在回答中提到的LintMISRA-C所提供的信息:PC-Lint / flexelint如果default存在,则不会发出警告,但不会作为最终条款MISRA-C发出警告1}}明确要求default作为最后一个条款出现。

答案 1 :(得分:1)

这就是为什么你应该有一个默认情况。它将处理您键入的案例以外的案件。

在你的情况下发生的是,它检查案例0并且它不匹配并检查案例1并且它也不匹配并检查案例2并且它再次不匹配。所以它退出..

所以它应该是这样的:

switch(val){
    case 0:
        // some actions
       break;
    case 1:
        // some actions
       break;
    case 2:
        // some actions
       break;
    default:
       //some actions
       break;
}

另一个需要注意的小问题:它应该是案例0:不是案例0;

答案 2 :(得分:1)

如果您使用0, 1, 2中的任何其他值(在此示例中),则不会发生任何事情。 val将与案例中的所有值进行比较,如果它不等于其中一个值,它将跳转到下一个语句。