C中IF和SWITCH / CASE之间的差异

时间:2013-05-30 09:47:34

标签: c if-statement comparison switch-statement

这个问题非常简单:在我今年参加的实验课上,教授在经典switch/case陈述的同时提出了if/then/else陈述,但没有说明在不同的编程情况下哪一个更好。< / p>

在检查可能至少有10/15个可能值的变量时哪个更好?

5 个答案:

答案 0 :(得分:9)

Breifly(你的问题很模糊),一个开关在汇编程序中编译成跳转表,因此比if / then / else更快。请注意,C中的switch语句具有“跟进”功能(google this),可以使用break语句来规避。

您只能打开评估为整数类型的内容。特别是这意味着您无法打开字符串:在任何情况下,字符串都不是自然C语言的一部分。

if / then / else连续检查几个条件。比较不限于整数类型,因为你所测试的只是真(非零)或假(零)。

这可能足以让你开始。

答案 1 :(得分:2)

当要比较的值具有适合switch'd的类型,并且它使您的代码更具可读性时,请继续使用switch。例如,

if (val == 0) {
    // do something
} else if (val == 1) {
    // do something else
} else if (val == 2) {
    // yet another option
} ...
switch相比,

更加混乱且难以维护。想象一下,有一天,你不想打开val,而是打开validate(val);那么你需要改变所有的条件。

此外,switch有时可能比if / else更快,因为编译器可能会将其变为jump tablebinary search。然后,编译器可能对一系列if / else语句执行相同的操作,尽管这是一个更难以进行的优化,因为子句顺序可能很重要并且编译器必须能够检测到它没有。

答案 2 :(得分:2)

我想 如果那么只有当你有2个条件时才更好。 否则,如果条件超过2

,最好使用switch case

答案 3 :(得分:1)

switch看起来比很多if更好。但是它只适用于数值表达式(因为char本质上是一个数字,它仍然可以应用于它,但是你不能将它用于字符串)。

如果我可以指向here,因为它对switch语句有很好的描述。请注意开头的句子:

  

Switch case语句可替代long if语句   将变量与几个“整数”值进行比较(“积分”值为   只是可以表示为整数的值,例如值   一个角色)。

答案 4 :(得分:1)

switch在性能方面也更好,因为它可以由编译器以各种方式进行优化,具体取决于值是否连续。如果是,它可以直接使用该值作为指针数组的索引。如果没有,它有时可以使用二进制搜索而不是线性搜索,当它更快时。