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阅读笔记(一)
代码大全也读了好几个月了,一开始读中文版,到现在慢慢尝试着读原版,确实感受到了"每天进步一点点"的魅力.遗憾的是没有从一开始就做阅读记录,总有不能尽兴和思路不清之感.确实,就像项目 ...
随机推荐
- 解决小米wifi在windows10无法创建问题
1.打开小米随身WIFI客户端安装文件夹(软件安装在那个盘,就在那个盘里找). 2.D:\Program Files (x86)\XiaoMi\MiWiFi\drivers\Win81x64(系统是3 ...
- Android APP使用NDK编译后的ffmpeg库出现undefined reference to 'posix_memalign'错误
在android程序中使用NDK编译后的ffmpeg库的时候出现了如下错误: jni/libs/libavutil.a(mem.o): in function av_malloc:libavutil/ ...
- 简单几句话总结Unicode,UTF-8和UTF-16
概念 先说一说基本的概念,这包括什么是Unicode,什么是UTF-8,什么是UTF-16. Unicode,UTF-8,UTF-16完整的说明请参考Wiki(Unicode,UTF-8,UTF-16 ...
- 在WPF中获取DataGridTemplateColumn模板定义的内容控件
xaml格式描述: <DataGrid Name="dataGrid" Grid.Row="1" ItemsSource="{Binding}& ...
- JS第二天简单总结
布尔型变量:true,flase 广泛用于真假的逻辑判断 对象:分类,对象是由一些彼此相关的属性和方法集合在一起而构成的一个数据实体: 例如,var today = new Date();中,Date ...
- 图表控件FlowChart.NET详细介绍及免费下载地址
FlowChart.NET是一款专业的.NET平台下的流程图及图表控件,它可以运行在任何C#, VB.NET或Delphi.NET语言编写的软件中.能够帮助你创建工作流程图.对象层次和关系图.网络拓扑 ...
- 后缀名“.dll .obj .lib”和“ .so .o .a”文件的区别含义
(1) .dll .obj .lib使用在windows平台下. .dll:动态链接库,作为共享函数库的可执行文件. .obj:目标文件,相当于源代码对应的二进制文件,未经 ...
- BackTrack5-r3改源
默认源服务器是国外的,更新起来会很慢,所以要改成国内的. 所需要的文件包地址:http://pan.baidu.com/s/1i3ouc9v(64位更新包)进入BT系统图形模式-将(语言选择器)文件拖 ...
- 19、lambda表达式树
一.定义: 表达式树又称为表达式目录树,以数据形式表示语言级代码.所有的数据都存储在树结构中,每个结点表示一个表达式(Expression). 二.要点: –Lambda表达式的参数类型可以忽略,因为 ...
- MVC 架构
MVC 模式是一种严格实现应用程序个部分隔离的框架模式.这种"隔离"也叫"分离关注点" 通俗名称:"松耦合" 松耦合的应用程序价格设计方式, ...