04.可读性.docVIP

  • 2
  • 0
  • 约2.27千字
  • 约 4页
  • 2018-07-04 发布于河南
  • 举报
04.可读性

4 可读性 4-1:注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。 说明:防止阅读程序时产生误解,防止因默认的优先级与设计思想不符而导致程序出错。 示例:下列语句中的表达式 word = (high 8) | low (1) if ((a | b) (a c)) (2) if ((a | b) (c d)) (3) 如果书写为 high 8 | low a | b a c a | b c d 由于 high 8 | low = ( high 8) | low, a | b a c = (a | b) (a c), (1)(2)不会出错,但语句不易理解; a | b c d = a | (b c) d,(3)造成了判断条件出错。 4-2:避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的枚举或宏来代替。 示例:如下的程序可读性差。 if (Trunk[index].trunk_state == 0) { Trunk[index].trunk_state = 1; ... // program code } 应改为如下形式。 #define TRUNK_IDLE 0 #define TRUNK_BUSY 1 if (Trunk[index].trunk_state == TRUNK_IDLE) { Trunk[index].trunk_state = TRUNK_BUSY; ... // program code } 4-3 不要编写太复杂的复合表达式,不要有多用途的复合表达式,不要把程序中的复合表达式与“真正的数学表达式”混淆。 i = a = b c d c + f = g + h ; // 复合表达式过于复杂 d = (a = b + c) + r ;//该表达式既求a 值又求d 值。应该拆分为两个独立的语句: a = b + c; d = a + r; if (a b c) // a b c 是数学表达式而不是程序表达式并不表示 if ((ab) (bc))而是成了令人费解的if ( (ab)c ) 4-4 if语句“与零值比较” 隐含错误的方式有多种,在程序设计的时候应该注意。 (1)不可将布尔变量直接与TRUE、FALSE 或者1、0 进行比较。 假设布尔变量名字为flag,它与零值比较的标准if 语句如下: if (flag) // 表示flag 为真 if (!flag) // 表示flag 为假 其它的用法都属于不良风格,例如: if (flag == TRUE) if (flag == 1 ) if (flag == FALSE) if (flag == 0) (2) 不可将float 还是double 类型浮点变量用“==”或“!=”与任何数字比较。 float x; if (x == 0.0) // 隐含错误的比较 if ((x=-EPSINON) (x=EPSINON))// 其中EPSINON 是允许的误差(即精度)。 (3) 应当将指针变量用“==”或“!=”与NULL 比较。 假设指针变量的名字为p,它与零值比较的标准if 语句如下: if (p == NULL) // p 与NULL 显式比较,强调p 是指针变量 if (NULL == P) // 如果写错,编译会报错 if (p != NULL) 不要写成 if (p == 0) // 容易让人误解p 是整型变量 if (p != 0) 或者 if (p) // 容易让人误解p 是布尔变量 if (!p) 4-1:源程序中关系较为紧密的代码应尽可能相邻。 说明:便于程序阅读和查找。 示例:以下代码布局不太合理。 rect.length = 10; char_poi = str; rect.width = 5; 若按如下形式书写,可能更清晰一些。 rect.length = 10; rect.width = 5; // 矩形的长与宽关系较密切,放在一起。 char_poi = str; 4-2:不要使用难懂的技巧性很高的语句,除非很有必要时。 说明:高技巧语句不等于高效率的程序,实际上程序的效率关键在于算法。 示例:如下表达式,考虑不周就可能出问题,也较难理解。 * stat_poi ++ += 1; * ++ stat_poi += 1; 应分别改为如下。 *stat_poi += 1; stat_poi++; // 此二语句功能相当于“ * stat_poi ++ += 1; ” ++ stat_poi; *stat_poi

文档评论(0)

1亿VIP精品文档

相关文档