zoukankan      html  css  js  c++  java
  • 好的编程习惯是减少bug最有效的方法

    公司来了几个新手,有时候很简单的一个功能模块都要耗费好几天时间,总是在一些不相关的问题上死耗一整天,搞出莫名其妙的问题,找不到具体原因,总是怀疑编译出问题了,系统出问题了,板子出问题了,搞到快下班了叫我帮他们看看。

    我总跟他们说,不要轻易怀疑系统,先去检查自己的“所作所为“,虽然系统也会有出错的时候,但是你永远要相信你自己出错的概率远大于系统,99.9%的时候都是你自己出了问题。

    首先,静态检查自己所写的每一行代码是有必要的,虽然有时候编译通过并不代表程序没有问题,只能说明语法上通过了,但是是否真实按照自己的设计意图编写的,却很难说。

    编程习惯不好,很容易在匆忙大意的时候改变了程序的设计逻辑,但是编译却能正常通过,自己却还不知不觉。

    举两个编程习惯的例子供参考。

    一、运算符与字符之间最好保留空格。

    如下对比

    int a=2;
    int b=3;
    
    int c = 4;
    int d = 5;
    

     可以明显看的出来,后面两行会更加舒适美观,但这不是我要说的重点,重点时候有时候这可以规避一些问题。

    再看下面的代码块

    /* no space */
    int comp_var(int *b)
    {
      int a=4;
    
      if (NULL==b)
        return a;
      else
        return a/*b;
    }
    

      

    上面这部分代码编译时无法通过,设计者原本意图是想计算a 除以 b指针的值,但是/*b 会被编译器解析成/* 表示注释开始,b属于注释内容,还会一直寻找最后的*/注释结束符。

    加上空格之后就消除了这种歧义。

    /* with space */
    int comp_var(int *b)
    {
      int a = 4;
    
      if(NULL == b) {
        return a;
      } else {
        return a / *b;
      }
    }
    

      

    二、变量与常量进行==比较时,最好把常量写前面,变量写后面。

    这种做法在一不小心将==写成了=号时,编译器能及时发现错误并告知我们,否则,编译器直接编译通过,但是当你运行程序的时候结果总是带给你“惊喜”。

    int comp_var(int a)
    {
      int b = 4;
    
      /* if(a == 3) */
      if(a = 3)
        return b;
      else
        return a;   
    }
    

      

    程序设计者本意是想比较a 和 3是否相等,但是误写成了赋值,编译器能正常编译通过看,但是程序执行时 if 条件永真,永远返回b的值4。

    如果将常量写在前面,则编译器在编译时便会报错提醒,开发者可以随时纠正。

    int comp_var(int a)
    {
      int b = 4;
    
      /* if(3 == a) */
      if(3 = a)
        return b;
      else
        return a;    
    }
    

      

     
    深圳宝安华美居
  • 相关阅读:
    单例模式
    HashSet、LinkedHashSet、SortedSet、TreeSet
    ArrayList、LinkedList、CopyOnWriteArrayList
    HashMap、Hashtable、LinkedHashMap
    andrew ng machine learning week8 非监督学习
    andrew ng machine learning week7 支持向量机
    andrew ng machine learning week6 机器学习算法理论
    andrew ng machine learning week5 神经网络
    andrew ng machine learning week4 神经网络
    vue组件监听属性变化watch方法报[Vue warn]: Method "watch" has type "object" in the component definition. Did you reference the function correctly?
  • 原文地址:https://www.cnblogs.com/tid-think/p/14482545.html
Copyright © 2011-2022 走看看