c语言中两种条件判断的比较
最近,我在写stm32单片机的程序,我是对开发板上的硬件按照模块例如LED、KEY、Buzzer、SysTick等进行变成的,也就是每一个模块相对独立,分别包含了一对头文件和源文件,在这一对头文件和源文件内部分别对模块的细节进行描述,形成数据结构、全局变量、函数。我在写函数的时候遇到一个问题,或者说有点疑问,那就是函数内部如果需要根据参数值的具体数值分多组进行条件判断,到底是使用if-else if-else呢,还是使用if...if...if...。
首先写函数的时候,默认函数参数列表中每一个参数被唯一一次赋值了唯一有效数值,也就说每一个参数的数值是确定的,这是前提条件,这里重点强调唯一一次这个概念。
其次,我们分析一下if(条件1)-else if(条件2)-else if(条件3)-else(剩余其他条件),这种条件判断的特点就是“条件互斥”,也就是条件1、条件2、条件3、...、剩余其他条件,这些条件是没有交叉的、互斥的、独立的,这么长一串条件判断可能执行多次判断,但是只会执行一次分支。我一前有一个误区,那就是这种条件判断执行一次判断,这种理解是错误的,正确的理解是:可能执行多次判断,但只能执行一次分支。
最后,我们分析一下多个if(条件1)、if(条件2)、、、if(条件N)这种条件判断,首先条件1、2、...N他们之间可能根本不存在关系(这里就不分析条件之间有所包含情况了,这种情况往往存在条件分配不当情况),一定执行N次判断,可能执行执行多次分支。
因此对参数值进行判断,如果条件之间存在互斥关系,那么可能执行多次判断,但只能执行一次分支,这个时候使用if-else if-else条件判断;如果需要对参数值进行多次条件之间无关系的判断,多少个条件就执行多少个判断,肯能执行多次分支,使用if...if...if条件判断。
总结:
1、if(条件1)-else if(条件2)-else if(条件3)-else(剩余其他条件):可能执行多次判断,但只执行一次分支。
2、if(条件1)、if(条件2)、、、if(条件N):一定执行N次判断,可能执行多次分支,这种条件判断就是以前所说的“触发判断”。
以上两种条件判断在函数编写过程中都存在,适用的场景是完全不同的,而且是互斥的。如果用第一种条件判断写了,也就完全不能使用第二种条件判断进行编写,但是这两种条件判断在编写代码过程中都有可能用到,哪种更适合用哪种。
还有一种就是:如果只存在关键字“if”那一定进行一次条件判断,如果存在关键字“else”那条件判断不一定执行。
更多推荐



所有评论(0)