1. 程式人生 > >C++/C程式設計指南之基本語句(轉)

C++/C程式設計指南之基本語句(轉)

運算子的優先順序:一元運算子+ - *的優先順序高於對應的二元運算子

  【規則 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 處理。