为了提供多路分支(multi-way branching )的能力,编程语言(如C语言)提供了选择语句(Slelection statements),如if语句和switch语句。但是多重的if-else-if语句在某些情况下执行效率较低,没有switch语句的运行速度快,我们需要灵活选择。
选择语句
C语言中的选择语句包含两种,其语法如下所示:selection-statement: if ( expression ) statement if ( expression ) statement else statement
switch ( expression ) statement
对于测试多个不同条件的情况,可以采用if...else if...else 的格式,也可以采用带有多个case标签的switch语句。if(test_expression == a)
a();else if(test_expression == b)
b();
...
...else if(test_expression == x)
x();else
fun();switch ( test_expression ) {case a:
statement_a; break;case b:
statement_b; break;
...default:
statement_default; break;
}
但是两者的运行速度上却有较大的差异。某些情况下,switch-case比if-else的运行速度更快。
实现机制
对于有多个判断条件的if语句,程序在执行时从第一个条件开始进行判断,如果测试条件为真,则执行相应的语句;如果不为真,则继续判断下一个条件。最快的情况下,需要到最后一个分之才能执行完成。对于分之较多的情况,效率尤其低下。
但是,switch语句得益于跳转表(jump table)的实现,可以根据测试条件直接跳转到相应的分支语句上去,不需要逐个对条件进行判断,在case数目很多的情况下也不会降低执行效率。
下面通过一个具体的测试程序对这一特性进行分析。
运行速度测试
这里通过一个包含10个分支的测试程序,对两种不同实现方式的运行速度进行对比和分析。int test_if_else(int v){ if(v == 1) return v * 13; else if(v == 2)