现在的位置: 首页 > 综合 > 正文

C++/C编程指南之基本语句(转)

2013年10月28日 ⁄ 综合 ⁄ 共 1766字 ⁄ 字号 评论关闭

运算符的优先级:一元运算符+ - *的优先级高于对应的二元运算符

  【规则 4-1-1】 如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级。

  复合表达式:如a = b = c = 0

  存在的理由1)书写简洁;2)可以提高编译效率。

  【规则 4-2-1】 不要编写太复杂的复合表达式。

  【规则 4-2-2】 不要有多用途的复合表达式。

  如: d = (a = b + c) + r ; 该表达式既求 a 值又求 d 值。

  【规则 4-2-3】 不要把程序中的复合表达式与“真正的数学表达式”混淆。

  如: if (a < b < c) // a < b < c 是数学表达式而不是程序表达式

  并不表示 :if ((a

  而是成了令人费解的 if ( (a

  if语句:以“与零值比较”为例

  布尔变量与零值比较

  【规则 4-3-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)

  整型变量与零值比较

  【规则 4-3-2】 应当将整型变量用“==”或“! =”直接与 0 比较。

  如:假设整型变量的名字为 value, 它与零值比较的标准 if 语句如下:

  if (value == 0)

  if (value != 0)

  不可模仿布尔变量的风格而写成

  if (value) // 会让人误解 value 是布尔变量

  if (!value)

  浮点变量与零值比较

  【规则 4-3-3】 不可将浮点变量用“==”或“!=”与任何数字比较。

  千万要留意, 无论是 float 还是 double 类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=” 与数字比较,应该设法转化成“>=”或“<=”形式。

  如:假设浮点变量的名字为 x,应当将

  if (x == 0.0) // 隐含错误的比较

  转化为

  if ((x>=-EPSINON) && (x<=EPSINON))

  其中 EPSINON 是允许的误差( 即精度)。

  指针变量与零值比较

  【规则 4-3-4】 应当将指针变量用”==”或”!=”与NULL比较。

  对if语句的补充说明

  if (NULL == p) 取代 if (p == NULL):防止将”==”误写成”=”,编译器又不报错

  if (condition) 改写成: if (condition) 或者: return (condition ? x : y);

  return x; {

  return y; return x;

  }

  else

  {

  return y;

  }

  循环语句的效率

  【建议 4-4-1】 在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少 CPU 跨切循环层的次数。例如示例 4-4(b) 的效率比示例4-4(a) 的高。

  

  【建议 4-4-2】 如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到 循环体的外面。如果 N 非常大,最好采用判断逻辑外提的写法,可以提高效率。如果 N 非常小,两者效率差别并不明显,不需将判断逻辑外提,因为程序更加简洁。

  for语句的循环控制变量

  【规则 4-5-1】 不可在 for 循环体内 修改循环变量,防止 for 循环失去控制。

  【建议 4-5-1】 建议 for 语句的循环控制变量的取值采用“半开半闭区间”写法。

  

  switch语句

  switch (variable)

  {

  case value1 : …

  break;

  case value2 : …

  break;

  …

  default : …

  break;

  }

  【规则 4-6-1】 每个 case 语句的结尾不要忘了加 break,否则将导致多个分支重叠(除非有意使多个分支重叠)。

  【规则 4-6-2】不要忘记最后那个 default 分支。 即使程序真的不需要 default 处理,也应该保留语句 default : break; 这样做并非多此一举,而是为了 防止别人误以为你忘default 处理。

 

转自 http://bbs.iieeg.com/viewthread.php?tid=255&extra=page%3D1

抱歉!评论已关闭.