code complete part2
基本数据类型:
1. 程序主体中仅能出现的数字就是0和1,除此之外,所有的数字都要用宏定义或者const类型,用清晰的变量名描述用途
2. 预防除零错误, assert(denominator!=0)或者其他
3. 显式进行类型转换
4.避免不同类型间比较
5.注意编译器警告
对于整数,需要注意:整数除法(去尾法),检查整数溢出,检查中间结果溢出
对于浮点数,需要注意:避免==的判断,需要加一个阈值,例如
for(i=0;i<10;i++)
a + = 0.1;
if(a==1.0)
因为最后的结果一定不会刚好等于1, 0.1在内存中二进制表示为0.000110011......
对于字符串,避免off-by-one错误,以及unicode,还有区分字符串和字符数组,malloc和calloc(包含了分配和初始化),用strcpy_s以及strncpy,不用strcpy
对于bool,用布尔变量来简化if的判断,一般写if(A&&B||C)可以直接写作 bool bskip = A&&B||C, if(bskip)....
对于枚举类型,把第一个留给非法值,因为大多数没有赋值的时候,就是0,这样可以及早的检测出问题
对于数组,如果操作比较复杂,不要用i,j来表示下标,因为比较容易弄混。。。
建立自己的类型,typedef float coordinate,这样可以起到封装的效果,并且一看就知道这个变量是用于存储坐标的;不过要记住不要重定义一个变量的类型
对于指针,可以用dog tag来监视这一段内存有没有被写坏。分配的时候多分配一些,在内存空间的前一段作为dog tag
组织直线型代码
如果有些函数要在另一些之前call到,请在函数名中清楚的表明这一点,init....之类的
使用条件语句
if...else 先判断那些正常的路径,再在else中处理那些不常见的代码
如果写了if,那么也要写else,要考虑如果出现了else怎么办
利用bool变量简化判断
对于case语句,把最常执行的放在顶端,用default来检查错误,打印错误信息
使用循环
任何时候都要在循环体加{},方便代码改动
循环的一些++操作,在循环体的最前面或者最后面进行
循环计数器应该是整形的
循环体不超过50行
嵌套小于3层
长循环挪到子函数中
code complete part2的更多相关文章
- code complete part1
最近在看code complete,学习了一些东西,作为点滴,记录下来. 关于类: 类的接口抽象应该一致 类的接口要可编程,不要对类的使用者做过多的假设.不要出现类似于:A的输入量一定要大于多少小于多 ...
- 重读 code complete 说说代码质量
重读code complete 说说代码质量 2014年的第一篇文章本来计划写些过去一年的总结和新年展望,但是因为还有一些事情要过一阵才能完成,所以姑且不谈这个,说说最近重读code complete ...
- Code Complete 读后总结和新的扩展阅读计划
Code Complete 读后总结和新的扩展阅读计划 用了一年时间终于将代码大全读完了,在这里做一个简单的总结,并安排下一阶段的扩展阅读计划. 1.选择代码大全作为我程序员职业入门的第一本书,我认为 ...
- Code Complete阅读笔记(三)
2015-05-26 628 Code-Tuning Techniques ——Even though a particular technique generally represen ...
- Code Complete阅读笔记(二)
2015-03-06 328 Unusual Data Types ——You can carry this technique to extremes,putting all the ...
- 《Code Complete》ch.24 重构
WHAT? 重构(refactoring),Martin Fowler将其定义为“在不改变软件外部行为的前提下,对其内部结构进行改变,使之更容易理解并便于修改”. WHY? 神话:一个管理很完善的软件 ...
- 《Code Complete》ch.23 调试
WHAT? 调试——发现错误的一种手段 WHY? 相对于不善于调试的程序员,善于调试的程序员只需要前者1/20的时间就可以找出问题所在 HOW? 科学的调试方法 把错误的发生稳定下来:假设-证实/证伪 ...
- 《Code Complete》ch.21 协同构建
WHAT? 所有的协同构建技术都试图通过这样那样的途径,将展示工作的过程正式化,以便将错误暴露出来 WHY? 提高缺陷检出率,从而缩短开发周期,降低开发成本 发现不明显的错误信息,如不恰当的注释.硬编 ...
- Code Complete阅读笔记(一)
代码大全也读了好几个月了,一开始读中文版,到现在慢慢尝试着读原版,确实感受到了"每天进步一点点"的魅力.遗憾的是没有从一开始就做阅读记录,总有不能尽兴和思路不清之感.确实,就像项目 ...
随机推荐
- Oracle 行转列(不固定行数的行转列,动态)(转)
http://bbs.csdn.net/topics/330039676 SQLSERVER :行列转换例子: http://www.cnblogs.com/gaizai/p/3753296.htm ...
- AngularJS时间轴指令
是基于ion.rangeSlider.js,主要代码如下: <link rel="stylesheet" type="text/css" href=&qu ...
- Javascript DOM编程艺术 语法部分
1.变量,可以变化的东西我们称为变量,随着年龄的增大,我们的age不断变大 2.Javascript变量声明用var,可以不声明变量类型.尽量声明为一个字符串字面量. 3.弱类型:要求程序员必须明确的 ...
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
- Command Pattern
当(客户)对象访问(服务)请求服务时,最直接的方法就是方法调用.
- Android Studio2.2.2下RecyclerView的使用
1,概述 RecyclerView可以完全代替ListView.GridView,整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同Layout ...
- [Python Fabric] [SSH] Mac OS X 10.9 + Vagrant虚拟环境使用Python Fabric进行SSH远程登录的简单实验
1. ssh客户端生成key $ Generating public/private rsa key pair. Enter file in which to save the key (/Users ...
- Java集合与算法
梗概: 集合接口 集合实现(链表.数组列表.散列集.树集.队列与双端队列.映射表) 集合与数组之间的转换 算法(排序.二分查找). 文章链接: http://mp.weixin.qq.com/s?__ ...
- JAVA 语法基础综合练习——学生成绩管理系统
代码如下:package com.lovo.manager; import java.util.Scanner; /** * 学生管理 * * @author Administrator * */ p ...
- W3C代码标准规范
一.目的: 为什么要遵循标准我们作为生产者实际上只是位于中游,既不是上游的浏览器制造商,他们是标准的真正制定者,也不算是下游,他们是浏览器的终端使用者.这个角色就意味着我们位于一个接口的位置,我们需要 ...