减少C中的If语句

时间:2012-06-07 00:34:46

标签: c optimization if-statement

我试图计算我的四个变量中有多少大于0,所以我写了这些if语句以达到我的目的。所有数字都是正数或0:

            if(a1>0){counter++;}
            if(a2>0){counter++;}
            if(a3>0){counter++;}
            if(a4>0){counter++;}

            printf("%d", counter);

很明显,如果变量的数量增加,我会遇到麻烦。是否有更有效的写作方式?

感谢您抽出宝贵时间帮助我。

5 个答案:

答案 0 :(得分:6)

如果您正在寻找单一陈述,

 counter+= (a1>0) + (a2>0) + (a3>0) + (a4>0);

应该这样做。如果您决定将数据打包成数组,

#define SIZE(x) (sizeof(x)/sizeof*(x))
int x, a[4];
for(x=0; x<SIZE(a); x++)
    counter += (a[x]>0);

仍然相当紧凑。

答案 1 :(得分:5)

从根本上说,你必须告诉编译器要检查哪个内存地址,以及放置结果的位置。

如果你有很多局部变量,你可能想要考虑一个数组或类似的数据结构来保存它们而不是大量单独声明的变量。在这种情况下,您可以定义一个数组来保存计数器结果,并使用循环结构。

如果你没有大量的局部变量,我怀疑你当前的方法和它一样好(你可以通过在数组中放置一个指向每个变量的指针然后使用循环,但数组初始化来获得幻想至少与当前if语句一样繁琐。

如果命名的话,我不会改变你的程序逻辑来使用数组,个别变量更自然。

答案 2 :(得分:3)

如果您刚使用阵列怎么办?比如:

int a[4];
int counter;
int i; // iterator
for(i=0;i<4;i++){
    if(a[i]>0){
        counter++;
    }
}
printf("%d", counter);

这将是更快,更短的代码,但如果你必须有单独的变量,你的方式是有效的。

答案 3 :(得分:0)

使用数组而不是单独的变量。然后循环遍历数组。

答案 4 :(得分:0)

如果所有变量属于同一类型,则可以在数组中存储指针,并使用循环检查并递增计数器。