基本数据类型:

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的更多相关文章

  1. code complete part1

    最近在看code complete,学习了一些东西,作为点滴,记录下来. 关于类: 类的接口抽象应该一致 类的接口要可编程,不要对类的使用者做过多的假设.不要出现类似于:A的输入量一定要大于多少小于多 ...

  2. 重读 code complete 说说代码质量

    重读code complete 说说代码质量 2014年的第一篇文章本来计划写些过去一年的总结和新年展望,但是因为还有一些事情要过一阵才能完成,所以姑且不谈这个,说说最近重读code complete ...

  3. Code Complete 读后总结和新的扩展阅读计划

    Code Complete 读后总结和新的扩展阅读计划 用了一年时间终于将代码大全读完了,在这里做一个简单的总结,并安排下一阶段的扩展阅读计划. 1.选择代码大全作为我程序员职业入门的第一本书,我认为 ...

  4. Code Complete阅读笔记(三)

    2015-05-26   628   Code-Tuning Techniques    ——Even though a particular technique generally represen ...

  5. Code Complete阅读笔记(二)

    2015-03-06   328   Unusual Data Types    ——You can carry this technique to extremes,putting all the ...

  6. 《Code Complete》ch.24 重构

    WHAT? 重构(refactoring),Martin Fowler将其定义为“在不改变软件外部行为的前提下,对其内部结构进行改变,使之更容易理解并便于修改”. WHY? 神话:一个管理很完善的软件 ...

  7. 《Code Complete》ch.23 调试

    WHAT? 调试——发现错误的一种手段 WHY? 相对于不善于调试的程序员,善于调试的程序员只需要前者1/20的时间就可以找出问题所在 HOW? 科学的调试方法 把错误的发生稳定下来:假设-证实/证伪 ...

  8. 《Code Complete》ch.21 协同构建

    WHAT? 所有的协同构建技术都试图通过这样那样的途径,将展示工作的过程正式化,以便将错误暴露出来 WHY? 提高缺陷检出率,从而缩短开发周期,降低开发成本 发现不明显的错误信息,如不恰当的注释.硬编 ...

  9. Code Complete阅读笔记(一)

    代码大全也读了好几个月了,一开始读中文版,到现在慢慢尝试着读原版,确实感受到了"每天进步一点点"的魅力.遗憾的是没有从一开始就做阅读记录,总有不能尽兴和思路不清之感.确实,就像项目 ...

随机推荐

  1. http://tool.oschina.net 在线API文档库java jquery ,php,很全的文档库

    http://tool.oschina.net  1.6API文档(中文)的下载地址: ZIP格式:http://download.java.net/jdk/jdk-api-localizations ...

  2. jquery 显示弹出层可利用动画效果

    1 show()方法和hide()方法 $("selector").show()  从display:none还原元素默认或已设置的display属性$("selecto ...

  3. win7 安装JDK7和JDK8后,卸载JDK8后出错

    这是本人学习Java过程中遇到的一些问题和解决方法,在此记录,方便本人查看,解决他人疑惑. 本人win7 x64旗舰版,同时安装了JDK7和JDK8,卸载了JDK8之后,cmd命令行输入:java - ...

  4. JAVA第四周作业

    import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream; ...

  5. 第二篇——The communication during software engineering.

    I've learned a lot in my software engineering class about how a program comes out.That's also a esse ...

  6. VMware10 安装centos6.7 设置NAT模式

    最近刚开始学Linux运维.我看的书是<跟阿铭学Linux>,视频教程里面使用NAT模式手动分配IP可以成功ping通网关,但是我照着视频一步一步操作却一直不成功,不知道是什么原因,昨天弄 ...

  7. 初次学习shader

    Shader "Custom/Diffuse Texture" { //在shader中的位置 Properties { //着色器的属性 _MainTex ("Base ...

  8. sis9280触摸ic 基于rk3288 的安卓4.4的 多点触摸

    前言:sis提供的驱动ic.基于rk3288的安卓系统.亲眼看到人家完成一次移植.很激动的记下一些东西..虽然我看不懂.其实现在的工作也不需要看懂.叫人协助就好,只需要知道有这个东西. 1linux下 ...

  9. 关于JavaEE 开发中web.xml的主要配置及其使用

    web.xml 中的listener. filter.servlet 加载顺序及其详解 在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人 ...

  10. NOIP 考前 数论复习

    POJ 2891 x=r1 (mod a1) x=r2 (mod a2) x=a1*x+r1,x=a2*y+r2; a1*x-a2*y=r2-r1; 用Extend_Gcd求出m1*x+m2*y=d; ...