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

Ale*_*lex 3 c switch-statement

我找到了以下代码:

switch(val){
    case 0:
        // some actions
       break;
    case 1:
        // some actions
       break;
    case 2:
        // some actions
       break;
}
Run Code Online (Sandbox Code Playgroud)

但目前还不清楚在例如情况下会发生什么val = 10

我试图在一个程序中用不正确的值测试这段代码,没有任何事情发生 - 程序正常退出.

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

oua*_*uah 6

它将无所事事,无论如何也无法进入.

建议defaultswitch声明中将子句作为最后一个子句.Lint如果您忘记该default条款,会发出警告的程序.有关信息请注意,该default条款是必需的MISRA-C.

编辑:

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

仅仅是为了我提到的信息LintMISRA-C我的答案:PC-Lint / flexelint不会发出警告,如果default存在但不作为最后条款,并MISRA-C明确要求default作为最后条款出现.