5.9.1 实用调试建议
在编写代码前一定要仔细考虑调试问题。如果已经写完很多行代码之后你才想到应该如何简化调试问题的话,那就太晚了。
首先你要决定如何报告错误:“使用error()并在main()中捕获异常”应该是你从本书学到的一个标准答案。
要提高程序的易读性,这样你会有更多机会发现错误所在:
·为代码做好注释。这并不意味着“加上大量注释”。能靠代码本身表达清楚的,不要用注释。注释的内容应该是你不能在代码里说清楚的部分。你应该用尽量简洁、清楚的语言把它们说清楚,包括:
·程序的名称;
·程序的目的;
·谁在什么时候写了这个代码;
·版本号;
·复杂代码片段的目的是什么;
·总体设计思想是什么;
·源代码是如何组织的;
·输入数据的前提假设是什么;
·还缺少哪一部分代码,程序还不能处理哪些情况。
·使用有意义的名字。
·这并不意味着使用“长名字”。
·使用一致的代码层次结构。
·你是代码的负责人,集成开发环境可以帮助但不能替代你做所有事情。
·本书所使用的编程风格可以作为一个有益的起点。
·代码应该被分成许多小函数,每个函数表达一个逻辑功能。
·尽量避免超过一或两页的函数;大多数函数应该很短。
·避免使用复杂的程序语句。
·尽量避免使用嵌套的循环,嵌套的if语句,复杂的条件等。不幸的是,有时你必须这样做,但请记住复杂代码是错误最容易隐藏的地方。
·在可能的情况下,使用标准库而不是你自己的代码。
·同样是完成某个功能,标准库一般会比你自己写的程序考虑得更周全,经过了更完备的测试。
上面的描述有些抽象,但在后续的篇幅中,我们会通过一个个的例子来向你详细解释。
程序首先要编译通过。在这个阶段,编译器显然是你最好的助手。它给出的错误信息通常是很有用的,虽然我们总希望得到更准确的信息。除非你是一个真正的专家,否则你还是假定编译器是正确的为好。当然,如果你是一个真正的专家,这本书也不是为你写的。有时,你会觉得编译器遵循的规则实在是太愚蠢而且没有必要(通常并非如此),这些规则能够而且应该更简单(的确,但是它们不是这样的)。然而,俗话说“糟糕的工匠才会抱怨他的工具”。好的工匠了解自己工具的长处和短处,并能在此基础上对自己工作进行相应调整。下面是一些常见的编译错误: ...