好的编程习惯是减少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;    
}

  

 
深圳宝安华美居
原文地址:https://www.cnblogs.com/tid-think/p/14482545.html