减少C中的If语句

Jon*_*Tan 1 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);
Run Code Online (Sandbox Code Playgroud)

很明显,如果变量的数量增加,我会遇到麻烦.有没有更有效的方式来写这个?

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

Dav*_*ave 6

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

 counter+= (a1>0) + (a2>0) + (a3>0) + (a4>0);
Run Code Online (Sandbox Code Playgroud)

应该做.如果您决定将数据打包到数组中,

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

仍然相当紧凑.


Eri*_* J. 5

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

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

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

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