本节书摘来自华章计算机《编写高质量代码:改善c程序代码的125个建议》一书中的第3章,建议20-4,作者:马 伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
建议20-4:尽量使逻辑判断语句置于循环语句外层
一般情况下,我们应该尽量避免在程序的循环体内包含逻辑判断语句。当循环体内不得已而存在逻辑判断语句,并且循环次数很大时,我们应该尽量想办法将逻辑判断语句移到循环语句的外层,从而使程序减少执行逻辑判断语句的次数,提高程序的执行效率。如下面的示例代码所示:
for (i = 0; i < n; i++)
{
if (condition)
{
DoSomething();
}
else
{
DoOtherthing();
}
}
在上面的代码中,每执行一次for循环,都要执行一次if语句判断。当for循环的次数很大时,执行多余的判断不仅会消耗系统的资源,而且会打断循环“流水线”作业,使得编译器不能对循环进行优化处理,降低程序的执行效率。因此,我们可以通过将逻辑判断语句移到循环语句的外层的方法来减少判断的次数,如下面的代码所示:
if (condition)
{
for (i = 0; i < n; i++)
{
DoSomething();
}
}
else
{
for (i = 0; i < n; i++)
{
DoOtherthing();
}
}
虽然上面的代码没有前面的看起来简洁,但却使程序执行逻辑判断语句减少n-1次,在for循环次数很大时,这种优化显然是值得的。
最后还需要注意的是,循环体中的判断语句是否可以移到循环体外,要视程序的具体情况而定。一般情况下,与循环变量无关的判断语句可以移到循环体外,而有关的则不可以。