编程风格
傅里叶变变
程序员自学之路
展开
-
编程精粹--编写高质量C语言代码(0):引言
准确地说,这本书的全名是> 直译也就是>,中文版一般被翻译为 C语言代码>>。 作者以自己在微软开发的经历,向我们讲解如何编写无错代码。只有对自己的程序非常自信,才敢说自己的代码是“Bug-Free”。 本书所介绍的诀窍是当发现错误时,就不断地就一以下两个问题追问自己的结果: 1,如何才能自动地查出这个错误? 2,怎样才能避免这个错误? 编译程序只能发现程原创 2014-05-07 22:19:58 · 1681 阅读 · 2 评论 -
编程精粹--编写高质量C语言代码(1):假想编译程序
编译程序仅仅能查找出程序的语法错误,而对于“数组越界访问”“对空指针解引用”等错误,编译程序是束手无策的。 同时我们知道测试人员所使用的黑箱测试方法所能做的只是往程序里填数据,并看它弹出什么。这就决定了 对程序错误的检测可能需要点运气。 假如编译程序能够检测出“数组越界访问”,“差一错误”等等错误,那么编写无错代码其实就要简答多了。 所以我们需要一个思维转变:原创 2014-05-09 19:25:48 · 2107 阅读 · 0 评论 -
编程精粹--编写高质量C语言代码(3):自己设计并使用断言(二)
接着上一遍文章>,继续学习如何自己设计并使用断言,来更加容易,更加不费力 地自动寻找出程序中的错误。 首先看一个简单的压缩还原程序原创 2014-05-16 18:53:33 · 1730 阅读 · 0 评论 -
编程精粹--编写高质量的C语言代码(2):自己设计并使用断言(一)
即使使用编译程序提供的所有警告设施,编译程序所发现的错误,也只是程序错误中的一小部分。例如 以下一行代码: strCopy=memecpy(malloc(length),str,length)); 当malloc 调用失败时,返回一个空指针,而memcpy如果没有处理空指针时,程序就会出现错误。编译程序是无法查出 这种或其他类似的错误。同样编译程序也无法查出算法的错误,原创 2014-05-13 20:18:38 · 1691 阅读 · 0 评论 -
编程精粹--编写高质量C语言代码(4):为子系统设防(一)
通常,子系统都要对其实现细节进行隐藏,在进行细节隐藏的同时,子系统为用户提供了一些关键入口点。程序员 通过调用这些关键的入口点来实现与子系统的通信。因此如果在程序中使用这样的子系统并且在其调用点加上了调 试检查,那么不同花很大力气就可以进行许多错误检查。 当子系统编写完成后,要问自己:“程序员什么情况下会错误地使用这个子系统,在这个子系统中怎样才能自动检 查出这些问题?”原创 2014-05-20 21:09:59 · 3130 阅读 · 3 评论 -
编程精粹--编写高质量C语言代码(5):为子系统设防(二)
接着上一篇文章>,继续以内存管理程序为例,讨论 如何为子系统设防。 内存管理程序有一个问题就是当我们第一次创建内存块时知道其大小,但随后几乎马上就会失去这一信息。上一篇文章 讲过,对于内存管理程序,检查指针的有效性不能仅仅检查指针是否为空,还需要检查这个指针是否指向某个 有效内存。假如能够知道已分配内存块的数目及其在内存块中的具体存储位置,那么对于任意指针的值,我们都 能原创 2014-08-28 20:59:21 · 973 阅读 · 0 评论 -
编程精粹--编写高质量C语言代码(6):对程序进行逐条跟踪
发现程序错误最好的方法就是执行程序。在程序执行过程中,我们利用我们的眼睛,或者通过我们编写的断言和子系统一致性检查等自动测试的工具来发现错误。虽然断言和子系统检查都很有用,但是如果程序员事先没有想到应该对某些问题进行检查,那么也就无法保证程序没有问题。 程序员可以在代码中设置断点,一步步跟踪代码的运行,观察输入变为输出的过程。程序员测试其程序最好的方法就是对程序进行逐条跟踪,对中间的结果进行认真原创 2014-08-29 21:13:40 · 1675 阅读 · 0 评论