2008年12月1日星期一

C++良好编程习惯(二)

----摘自《C++编程金典》第二章--控制结构
  1. 在程序中合理进行缩进(缩排)处理,可显著增强程序的可读性--建议将每个缩进单位设为1/4英寸或3个空格字符。
  2. 在程序设计阶段,通常先用伪代码来“思考”程序,再将伪代码程序转换成真正的C++程序。
  3. if/else结构的两个主体语句都应缩进。
  4. 如同时有数级缩进,那么每级缩进都在上一级缩进的基础上增加相同数量的空格。
  5. 始终记得在if/else结构(或其他任何控制结构)中主置花括号,这样有助于避免它们不慎被遗忘,特别是在以后为if/esle从句添加语句时。
  6. 有的程序员在花括号内键入单独的语句之前,习惯于先输好复合语句的起始和结束花括号。这是一个很好的习惯,有助于避免不慎漏掉一个或两个花括号。
  7. 无论如何都要初始化计数器和总和。
  8. 单独用一行声明每个变量。
  9. 进行除法运算时,假如除数可能为零,请务必明确检测这一条件,并在程序中预先采取防范措施(比如打印一条出错提示信息等等),不要让潜在的问题引发严重错误!
  10. 每次需要键盘输入时都提醒用户。提醒时,应指出输入所采取的形式,以及任何特殊值(比如用户应输入哪个标记来中止循环)。
  11. 在标记控制的循环中,请在输入数据提示中,明确告诉用户哪一个是标记。
  12. 不要试图对比两个浮点数是否相等。相反,应测试两个浮点数的差值的绝对值是否小于指定的值。
  13. 声明变量时便对其初始化,有助于程序员避免以后忘记初始化数据的问题。
  14. 一元操作符应紧挨操作数,中间不含任何空格。
  15. 用整数值来控制计数循环。
  16. 每个控制结构主体中的语句都进行缩进处理。
  17. 在每个控制结构前后都留一个空行,将其同程序的其余部分区分开。
  18. 嵌套级别过多,会导致程序难于理解。通常应把嵌套控制在3级以内。
  19. 控制结构上下的垂直间距,以及在控制结构头部对控制结构主体的缩进,可为程序员营造一种二维外观,从而极大增强可读性。
  20. 在while或for结构的条件中使用终值,并使用关系操作符<=有助于避免产生值相差1错误。例如,对用于打印1到10的循环来说,循环继续条件应是counter〈=11(尽管仍然是正确的)。许多程序员仍然喜欢所谓的“零基计数”。也就是说为通过一个循环计数10次,先将counter初始化为零,再将循环继续检测条件高为counter〈10。
  21. 在for结构的初始化及自增部分,应昼只使用与控制变量有关的表达式。如还需对其他变量进行处理,不在循环之前进行(前提是它们只执行一次,比如初始化语句),就在循环主体内进行(前提是每次重复都要执行,比如自增或自减语句)。
  22. 尽管可在for循环主体中更改控制变量的值,但尽量避免这样做,因为可能导致不易察觉的逻辑错误。
  23. 尽管for之前的语句以及for之内的语句经常都可合并到for的头部,但尽量避免这样做,因为这会降低程序的可读性。
  24. 尽可能将任何控制结构的头部限制在一行之内。
  25. 不要用float或double类型的变量来执行财务计算。不精确的浮点数会造成错误,得到不正确的金额。在练习中,我们探讨了用整数执行金融计算的方法。注意:可选择由第三方厂商提供的C++类库,它们能正确地执行金融计算。
  26. 无论如何都在switch语句中提供一个default条件。在无default条件的switch语句中,那些没有明确进行检测的情况会被忽略。如包括default条件,会使程序员关注对例外情况的需求。某些情况下,不需要进行default处理。尽管switch结构中的case从句和default从句可按任意顺序排列,但作为一个良好的习惯,应将default从句列于最后。
  27. 在switch结构中,假如default从句列于最后,则不需要为它使用break语句。有的程序员包括这个break的原因是为了更有条理,以及与其他case对应。
  28. 有的程序员习惯在do/while结构中包含花括号--即使花括号并无实际用途。这样做有助于区分while结构和只包含了一条语句的do/while结构。
  29. 有的程序员觉得break和continue违背了结构化编程准则。由于这些语句的效果可通过结构化编程技术实现,所以他们不使用break和continue。

0 评论: