好的编程习惯是减少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;
}
好的编程习惯是减少bug最有效的方法的更多相关文章
- 程序员减少代码BUG的7种方法,拒绝编程5分钟,查代码2小时!
0.别对警告视而不见 相信不少的程序员会使用IDEA,使用它敲代码,有时候会出现警告,那么这时你对警告就不能视而不见了. 我们的目标是,写干净的代码,做风一样的男子! 1.编程习惯 种瓜得瓜种豆得豆, ...
- iOS高效编程秘诀—坚持编程习惯
资料源于网络 习惯会影响一个人做事的方式,也会直接影响效率.我经常在项目完成后自我总结,有哪些做得好的,有哪些做得不好的?然后把一些好的流程记录下来,并且重新运用回编程中.那些能够坚持去做的流程,就变 ...
- 我的iOS高效编程秘诀—坚持编程习惯
http://www.cocoachina.com/programmer/20150819/13103.html 作者:sunljz 授权本站转载. 习惯会影响一个人做事的方式,也会直接影响效率.我经 ...
- 提高万恶的KPI,切忌要避开这六个低效的编程习惯
作者:程序员小跃 Slogan:当你的才华还无法撑起你的野心时,那应该静下心来好好学习 上次的翻译,引起了很大的反响,大家都想知道自己和高级工程师的差距,看了我的文章,是不是都在默默地做着比较呢?如果 ...
- C 语言编程习惯总结
笔者能力有限,如果文中出现错误的地方,还请各位朋友能够给我指出来,我将不胜感激,谢谢~ 引言 编程习惯的培养需要的是一个长期的过程,需要不断地总结,积累,并且我们需要从意识上认识其重要性,一个良好的编 ...
- 关于减少BUG的思考
开发之前,就要先设计,理清好思路:如果需求都不清楚,软件肯定有缺陷: 和客户.测试的沟通 如果开发出来的东西本身就有BUG,交给测试,会浪费很多人的时间. 开发做完一个功能后,要自己做一遍测试 自己的 ...
- 养成这8个编程习惯,你的Python性能将蹭蹭蹭地往上涨
Python不以性能见长,但掌握一些技巧,也可尽量提高程序性能,避免不必要的资源浪费. 1. 使用局部变量 尽量使用局部变量代替全局变量:便于维护,提高性能并节省内存. 使用局部变量替换模块名字空间中 ...
- java的编程习惯影响程序性能
在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身. 养成良好的编程习惯非常重要,能够显著地提升程序性能. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时 ...
- js代码之编程习惯
编程习惯: 异常处理 如果你没有使用异常处理的习惯,这可能是因为你并未真正的理解它的作用.当你正确使用异常处理之后,你会发现你的代码最显著的变化就是:少了很多的 if-else 语句 . 虽然在 JS ...
随机推荐
- 【转】Gitlab CI & Docker & Dockerfile & Docker-compose的博客文章
gitlab权限设置 GitLab功能系列报道-标签(Labels) Gitlab CI 使用高级技巧 docker-compose是个好东西,越用越香 基于docker-compose的Gitlab ...
- go相关
mac 上build go 如果想要在centos上面执行 必须使用下面的方式 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o hello ...
- CentOS linux系统将UTC时间修改为CST时间
1.编辑时间配置文件 1 2 3 4 # vi /etc/sysconfig/clock ZONE="Asia/Shanghai" UTC=false ...
- 机器学习——逻辑回归(Logistic Regression)
1 前言 虽然该机器学习算法名字里面有"回归",但是它其实是个分类算法.取名逻辑回归主要是因为是从线性回归转变而来的. logistic回归,又叫对数几率回归. 2 回归模型 2. ...
- Jmeter系列(18)- 八大组件
说明 取样器(Sampler):不与其他元件发⽣交互的作⽤的元件 逻辑控制器(Logic Controller):只对其⼦节点的sampler有效,⽽其他元件需要与sampler等元件交互 前置处理器 ...
- vue实现事件代理(通过事件冒泡实现)
事件代理/事件委托以ul>li来模拟 使用冒泡的用法:使用冒泡的用法来实现事件代理 分离出来 动态根据索引添加类名:
- python处理权限关系一些注意事项
在模型类中多对多的关系(必须是对象) 如果要获取多对多表中的值,必须使用对象进行搜索,不能直接输入名称 例:这样才能查找到(下面例子是针对,组设置多对多关到用户,现在要根据用户获取相应的组) user ...
- 自学 Python,视频教程和代码一看就懂,动手就废,应该这么学
一.代码量太少了,看得多做得少,导致一做就错. 每一个测试工程师必定是在大量的时间和代码中提升的自己,如果你只是看视频的话,那永远都停留在理论上,很多问题是要实践才能发现的 我打个比方你看视频的时 ...
- UVa/数组与字符串习题集
UVa-272. Description: TEX is a typesetting language developed by Donald Knuth. It takes source text ...
- 利用Java Agent进行代码植入
利用Java Agent进行代码植入 Java Agent 又叫做 Java 探针,是在 JDK1.5 引入的一种可以动态修改 Java 字节码的技术.可以把javaagent理解成一种代码注入的方式 ...