首页 > 解决方案 > 最后一个开关没必要?

问题描述

我正在思考我为 4 个互斥案例编写的 switch 语句。我在每个案例的末尾插入了一个 break 语句,因为我不想在一个案例或另一个案例成功后再次进行测试。

不过,这就是问题所在。如果有的话,最后一次休息会做什么?如果测试用例 43 成功,则 break 终止该案例,但如果没有 break,则默认值不应运行,因此无论如何都不会浪费测试。

这是代码:

switch(telemetry) {
    case(40):
        printf("\nHouse Telemetry #%i \n", psc);
        break;
    case(41):
        printf("\nNav Telemetry #%i \n", psc);
        break;
    case(42):
        printf("\nDownhill Telemetry #%i \n", psc);
        break;
    case(43):
        printf("\nRealTime Telemetry #%i \n", psc);
        break; // what do I do?
    default:
        printf("\nCommand ID not recognized\n");
}

也许你们中的一位编译器大师可以给我建议。

标签: cswitch-statementdefault

解决方案


如果您没有break;in case 43,它将落入默认案例,执行printf("\nCommand ID not recognized\n");.

为什么你认为default不会运行?switch-case 将继续执行,直到遇到break语句,这包括该default部分。

因此所需的行为需要中断。


将 abreak;放在 switch-case 的最后一个元素上(无论是default还是case)是可选的,因为它会停止即将结束的执行。

我遇到过对此有两种看法的程序员:在块的最后不应该有一个额外break的,因为它没有必要,或者应该有一个为了一致性,以及这些部分得到重新的可能性- 安排在未来。


推荐阅读