当C/C++程序切换语句转到未定义的大小写并缺少默认值时,它的正确行为是什么?

C. *_*eng 0 c c++ switch-statement

我的问题涉及如何允许编译器在C和C++中实现switch语句.

如果case变量缺失但是没有default提供程序试图"跳转"到奇数计算的偏移量或者是否为了防止控制流程的潜在问题而陷入困境?

Sou*_*osh 5

按照C11标准,章节§6.8.4.2,switch声明(强调我的)

[...]如果转换后的值与提升的控制表达式匹配,则控制将跳转到匹配case标签后面的语句.否则,如果有default标签,控制将跳转到带标签的语句.如果没有转换的大小写常量表达式匹配且没有default标签,则不执行开关主体的任何部分.

所以基本上,控制经过整个switch身体.

因为C++,逻辑是一样的.来自C++11§6.4.2,感谢@Jack

如果没有case匹配,如果没有匹配则执行中没有default任何语句switch.