今天被一个人问了一个C语言题,我尽然有点懵

if(temp_A)
{
    for(i=0;i<n;i++)
    {
        do_one_thing()
    }
}
else if(temp_B)
{
    for(i=0;i<n;i++)
    {
        do_another_thing()
    }
}


for(i=0;i<n;i++)
{
    if(temp_A)
    {
        do_one_thing()
    }
    else if(temp_B)
    {
        do_another_thing()
    }
}

以上这两种语法各有什么优缺点,我一时间竟然不知道怎么答~~

将判断 放在循环外,提高代码执行效率。上面的代码1在不考虑编译优化的情况下效率高

前者理论上会稍微快一些,因为循环里面没有分支预测,更适合并行执行。而分支预测放在循环里面,那么两个分支都要prefetch进来。

要知道执行判断是要耗时的,前者判断一次或两次,后者要判断n次或者2n次。如果temp_A和temp_B同时为NULL,前者就不需要执行for循环,后者必须执行for循环。但如果从代码可读性,整洁性来看,后者比较好

肯定第二个啊,很明显的是第一个他的时间复杂度是后者的2倍,效率就十分低,耗费时间久