switch命令中缺少默认大小写-这可能是运行时错误吗?

switch命令中缺少默认大小写-这可能是运行时错误吗?,c,compilation,runtime-error,C,Compilation,Runtime Error,我与我的编译课程讲师有一个争论: 在作为本课程一部分的测试中,一些问题涉及用C编写的识别和分类代码段。 这些问题中的每一个都必须指出错误将暴露在什么阶段: a、 词汇分析 b。综合分析 c。语义分析 d。运行时间(特定条件下) e。这不是一个错误 这种风格的问题之一如下: 切换没有默认组件的命令。例如: switch (key){ case 1: ......... case 2: ......... case 3:.......... } 现在,在官方测试解决方案中,在上述情况下,只有选

我与我的编译课程讲师有一个争论:

在作为本课程一部分的测试中,一些问题涉及用C编写的识别和分类代码段。 这些问题中的每一个都必须指出错误将暴露在什么阶段:

a、 词汇分析

b。综合分析

c。语义分析

d。运行时间(特定条件下)

e。这不是一个错误

这种风格的问题之一如下:

切换没有默认组件的命令。例如:

switch (key){
case 1: .........
case 2: ......... 
case 3:.......... 
}
现在,在官方测试解决方案中,在上述情况下,只有选项e是正确的。 然而,我认为选项d不一定会被彻底拒绝,这也是正确的。 作为论证,我(在测试后)向讲师展示了以下两个例子:

(一)

(发件人:)

(二)

(发件人:)

然而,他还不确信在这种情况下会考虑运行时错误选项。他说,由于上面提到的问题,它仅适用于直接显示在问题中的命令或代码片段,并且因为代码没有代码的意图,因此在这种情况下,他们实际上是在询问此结构本身是否无效,因此此处拒绝您的运行时错误(我个人没有注意到这里有任何矛盾…)


如果你能分享你对这个问题的看法,我会很高兴。

你的讲师是正确的

在开关中省略默认情况是完全有效的代码,不会直接导致任何类型的问题。这可能正是程序员想要的,并且做正确的事情

当然,总是可以添加一些会导致问题的代码,但这是添加的代码的问题,而不是开关本身的问题。像“始终添加默认情况”这样的代码样式规则可能会防止某些类型的编程错误,但不遵循这些规则不会自动导致这些错误-它“只是”需要更加谨慎

从代码样式的角度来看,通常最好明确表示有意忽略某些情况,或者添加一些默认处理程序以防止意外值,但这并不意味着忽略此类处理程序本身总是不正确的


(请注意,在您与自己联系的问题中,您主张省略没有任何用处的默认情况,以减少混乱-我不完全同意这一点,但这是一个风格问题)

我不同意您的论点。您可以对其他所有问题使用相同的论点-“这是一个运行时错误,因为程序员打算执行其他操作"。如果使用
默认值
捕获所有其他值,则可能会引入错误。例如,
x
的其他可接受值可能不需要在开关
情况下考虑,但会被
默认值
拒绝。发布代码,而不是代码图片。也就是说,如果您希望获得答案和不是答案的图片…@Lundin在这种情况下,这是有必要的,因为这里给出了解释。那么我在帖子中添加的例子呢?mitre.org将其归类为“糟糕的编码实践”这可能是漏洞的原因,但这不会使此代码无效,也可能不会导致运行时错误。事实上,mitre可能更担心程序继续“正常”工作尽管由于程序员的疏忽,安全检查没有返回预期的状态。这是程序逻辑中的错误,但不是运行时错误。空指针访问示例(希望)会导致运行时错误,但这是取消引用空指针的代码中的错误,而不是此处显示的开关/代码中的错误。否则,没有
else
的任何
if
都属于同一类别,因为某些运行时问题可能会由于遗忘而在其他地方出现。