vlambda博客
学习文章列表

C语言经典分析:"switch" VS "if...else"

    /***按照惯例先聊一聊***/

    今天说的这个话题,可能在平时并不会太在意,因为一般的项目中这两个语法的选择可能对项目本身而言并没有太大的影响,因为都是条件判断语句;有一部分人喜欢用switch可能觉得写出来的代码比较优雅,不过也有部分人喜欢用if...else觉得这样的话代码比较容易阅读且简单。哈哈,我觉得把如果两个没有什么区别的话或者只根据个人喜爱的话可能C语言完全没有必要保留两者,舍弃其中一个岂不C语言会更加简单。其实不然,有句话说得不错,“存在即合理”。

    其实这两个没有绝对的优劣,而是要从应用的实际情况出发,再进行比较;所以说我们首先需要了解这两种条件判断语句在我们平台上是如何实现的,然后根据不同的实现方式对其进行分析优劣。

    /***具体分析分析***/

    1)对于一般的程序员可能用switch的比较少的原因:

        1、switch的case必须是整形,这样对于很多浮点的比较判断等比较麻烦;

        2、switch的每个条件都会配break;(除非多个选项同时在一起处理可以不用break)不太熟悉的程序员经常容易丢break造成程序上的错误;

        3、switch中嵌套子条件判断,这样实现就比较麻烦。

    其他的原因我也举例不出来了;

     2)两种条件判断的实现方法:

        1、if...else的实现是从上至下逐个比较,直到满足条件就会执行条件满足的处理。

        2、switch编译以后会把每个case中的量编译到程序中相当于生成了一张表格,通过switch中传入的值,跳转到对应的处理代码部分。

     3)我们该如何选择:

        1、如果是通过一个整型变量进行分支,且是一种关于类型的分支,非比较数字大小的分支,且分支比较多的时候,推荐使用switch,switch直接跳转的,这样相对比较高效

        2、如果分支并不是很统一,且分支结构非常复杂,先对分支进行分类,采用if...else更加清晰,以后也容易扩展;

        3、对于程序设计前期,需要对条件判断进行分类,然后采用switch和if相结合的方式进行编程,从而获得高效和代码的阅读性。

        4、同时对于不同的编译器可能对代码的优化程序不一样,对于嵌入式开发,我们首先可以写两种条件判断的语句,反汇编进行阅读,然后了解编译器的处理方式,然后进行选择,其实一般的代码都不会考虑太多!