c – Big if else声明

c – Big if else声明,第1张

概述如果有一个大的(大约100加)if else语句如下,if else条件可能是不规则的(例如一些取决于3个变量,有些取决于4),有没有办法让它变得更简单? 基本上我有一个大约100多行的表,其中a,b,c和d作为列.基于a,b,c和d,我需要执行3种不同类型的功能. 该表描述了一组业务规则. uint8 a; uint8 b; uint16 c; uint8 d; if ( 如果有一个大的(大约100加)if else语句如下,if else条件可能是不规则的(例如一些取决于3个变量,有些取决于4),有没有办法让它变得更简单?

基本上我有一个大约100多行的表,其中a,b,c和d作为列.基于a,c和d,我需要执行3种不同类型的功能.

该表描述了一组业务规则.

uint8 a; uint8 b; uint16 c; uint8  d; if      ( a == 1 &&   b == 1           && c == 0)           { functionA();} else if ( a == 5 &&   b == 5           && c == 2 && d == 2) { functionB();} else if ( a == 1 && (b ==36 || b == 7) && c == 0)           { functionC();}   else if ( a == 3 &&   b == 3                     && d == 50) {functionA();}    :    :
解决方法 有很多方法可以使它更简单,例如:

>您可以从包含a,c和d值的结构填充地图以检查要调用的函数(填充地图的代码可能仍然是一团糟,但它会更快更清晰地执行;可以为案例添加两个键ala b == x || b == y)
>你可以手动分析条件:给出你的例子,如果(a == 1)if(b == 1&& c == 0)functionA();否则if((b == 36 || b == 7)&& c == 0)functionC();. switch语句可以使这个更干净.在这样的分解中,您还可以使用<,< =,>和/或> =来划分更大的搜索空间,从而将性能从O(N)提高到O(log2N).
>对于测试a,c和d一次的常见简单情况,使用宏ala #define EliF_ABCD(A,B,C,D,F)否则if(a ==(A)&& b ==(B)&& c ==(C)&& d ==(D))F();.根据需要为其他测试组合添加宏,例如ABD,ABC,AD.
>(可能使代码更加神秘),但可以探索位移和将值组合成一个足够大的类型(int64_t),然后例如.二进制搜索函数指针数组

值得注意的是,if / else链可能包含以下内容:

if (a == 1 && c == 3 && d == 2) functionY();else if (a == 1 && b == 2 && c == 3) function X();

这里,顺序很重要,因为输入可以匹配两者.如果不同地考虑搜索或者使用某种方式对函数指针进行索引,则这个方面很容易丢失或改变,这是支持上述宏方法的一个论据.

总结

以上是内存溢出为你收集整理的c – Big if else声明全部内容,希望文章能够帮你解决c – Big if else声明所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1235370.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存