13.9 常见编程错误
在由若干编程团队开发的大型系统中,最常见的问题就是在关于系统设计的细节上缺乏一致性。如果应用前面章节介绍的软件开发方法,就可以将一个大型问题合理地、逐步地划分为小一些的子问题,这些子问题对应于各自独立的函数。然后就可以设计详细说明,也就是每个函数要做什么以及它要操作的是什么数据类型。只有当所有团队的代表都完全同意该基本接口信息时,继续进行系统实现才是明智的。
当开发个人库时,在快速完成当前项目的过程中很容易忘记应使函数可重用的长远目标。将一个不必要的约束条件加入库函数内会在另一个上下文环境中很快使函数无效。
尽管宏为它们所代表的表达式提供了快速和通常十分易读的简写标记,但它们也是错误滋生的温床。在带有参数的宏定义中,宏名后很容易依惯性键入一个空格,这会使得预处理器错误理解该定义。运算符优先顺序错误肯定会出现,除非编程者极度小心地将每个产生结果值的宏体用括号括起来,并且将在宏体中出现的每个宏参数也用括号括起来。遵循一致的宏命名约定可以节省很多不必要的调试时间,而这样的调试是由于编程者的错误假设引起的,该假设认为调用的是一个函数,而不是一个宏。
在计算技术的历史上,不恰当地使用全局变量以破坏系统的可靠性而出名。通过参数保持函数间可见接口的重要性怎么强调都不过分。只有带可见接口的函数才是通过库包含进行重用的较好选择。
图书导读







