高質量C 程式設計指南 一

2021-05-25 06:15:06 字數 4336 閱讀 6886

1

檔案結構

標頭檔案的作 用

早期的程式語言如

basic

、fortran

沒有標頭檔案的概念,

c++/c

語言的初學者雖然會用使用標頭檔案,但常常不明其理。這裡對頭檔案的作用略作解釋: (

1)通過標頭檔案來呼叫庫功能。在很多場合,源 **不便(或不准)向使用者公布,只要向使用者提供標頭檔案和二進位制的庫即可。使用者只需要按照標頭檔案中的介面宣告來呼叫庫功能,而不必關心介面怎麼實現的。編譯 器會從庫中提取相應的**。 (

2)標頭檔案能加強型別安全檢查。如果某個介面 被實現或被使用時,其方式與標頭檔案中的宣告不一致,編譯器就會指出錯誤,這一簡單的規則能大大減輕程式設計師除錯、改錯的負擔。

2

程式的版式

空行起著分隔程式段落的作用。空行得體(不過多也不過少)將使程式的布局更加清晰。空行不會浪費內 存,雖然列印含有空行的程式是會多消耗一些紙張,但是值得。所以不要舍不空行。

修飾符的位置

若將 型別的 指標。

此處y 容 易被誤解為指標變數。

雖然將x和

y分行定義可以避免誤解,但並不是人人都願意這樣做。

【規 則

2-6-1

應當將修飾符 和&

緊靠變數名

例如:char  *name;

此處y 不會被誤解為指標

比較著名的

命名規則當推

microsoft

公司的「匈牙利」法,該 命名規則的主要思想是「

在變數和函式名中加入字首以增進人們對程式的理 解」。例如所有的字元變數均以ch 為字首,若是指標變數則追加字首p 。如果乙個變數由ppch 開頭,則表明它是指向字元指 針的指標。「匈牙利」法最大的缺點是煩瑣。

【規則3-1-3】命 名規則盡量與所採用的作業系統或開發工具的風格保持一致。

【規則

3-1-6變數的名字應當使用「名詞」或者「形容詞+名詞」。

例如:float  value;

float  oldvalue;

float  newvalue;

【規則 3-1-7】全域性函式的名字應當使用「動詞」或者「動詞+名詞」(動賓片語)。類的成員函式應當只使用「動詞」, 被省略掉的名詞就是物件本身。

例如:全域性函式

類的成員函式

【規則 3-1-8】用正確的反義詞組命名具有互斥意義的變數或相反動作的函式等。

例如:int   minvalue;

int   maxvalue;

int   setvalue(…);

int   getvalue(…);

簡單的windows

應用程式命名規則 例如

windows

應用程式的識別符號通常採用「大小寫」混排的方式,如

addchild

。而unix

應用程式的識別符號通常採用「小寫加 下劃線」的方式,如

add_child

。別把這兩類風格混在一起用。

簡單的windows

應用程式命名規則

【規則 3-2-4】靜態變數加字首

s_(表示

static)。

例如:void init(…)

【規則 3-2-5】如果不得已需要全域性變數,則使全域性變數加字首

g_(表示

global)。

例如:

全域性變數

全域性變數

【規則 3-2-6】類的資料成員加字首

m_(表示

member

),這樣可以避免 資料成員與成員函式的引數同名。

例如:void object::setvalue(int width, int height)

4

表示式和基本語句

4.3.2

整型變數與零值比較

【規則

4-3-2應當將

整型變數用「== 」 或「!= 」直接與0 比較。

假設整型變數的名 字為value ,它與零值比較

的標準if

語句如下:

if (value == 0)  

if (value != 0)

不可模仿布林變數的風格而寫成

value 是布林變數

if (!value)

4.3.3

浮點變數與零值比較

【規則

4-3-3不可將

浮點變數用「== 」或「!= 」與任何數字比較。

千萬要留意,無論是float 還是double 型別的變數,都有精度限制。所以一定要避免將浮點變數用「== 」 或「!= 」與數字比較,應該設法轉化成「>= 」 或「<= 」形式。

假設應當將

隱含 錯誤的比較

轉化為if ((x>=-epsinon) && (x<=epsinon))

其中epsinon 是允許的誤差(即精度)。

4.3.5

對if 語句的補充說明

if (null = p) 是錯誤的,因為null 不能被賦值。

程式中有時會遇到if/else/return 的組合,應該將如下不良風格的程式

if (condition) 

return x;

return y;

改寫為if (condition)

else

或者改寫成更加簡練的

return (condition ? x : y);

迴圈語句的效率

c++/c迴圈語句中,for 語句使用頻率最高,while 語句其次,do 語句很少用。本節重點論述循 環體的效率。提高迴圈體效率的基本辦法是降低迴圈體的複雜性。

【建議

4-4-2如果迴圈體內存在邏輯判斷,並且迴圈次數很大,宜將邏輯判斷移到迴圈體的外面。示例4-4(c) 的 程式比示例4-4(d) 多執行了n-1 次邏 輯判斷。並且由於前者老要進行邏輯判斷,打斷了迴圈「流水線」作業,使得編譯器不能對迴圈進行優化處理,降低了效率。如果n 非常大,最好採用示例4-4(d) 的寫法,可以提高效 率。如果n 非常小,兩者效率差別並不明顯,採用示例4-4(c) 的 寫法比較好,因為程式更加簡潔。

for (i=0; i

if (condition)

else

效率高但程式不簡潔

【建議

4-4-1在多重迴圈中,如果有可能,應當將最長的 迴圈放在最內層,最短的迴圈放在最外層,以減少cpu 跨切迴圈層的次數。例如示例4-4(b) 的效率比示例4-4(a) 的高。

for (row=0; row<100; row++)

} for (col=0; col<5; col++ )

} 高效率:長迴圈在最內層

自從提倡結構化設計以來,goto 就成了有爭 議的語句。首先,由於goto 語句可以靈活跳轉,如果不加限制,它的確會破壞結構化設計風格。其 次,goto 語句經常帶來錯誤或隱患。它可能跳過了某些物件的構造、變數的初始化、重要的計算等語 句,例如:

goto state;

被goto 跳

被goto 跳 過 …

state: …

如果編譯器不能發覺此類錯誤,每用一次goto 語句都可能留下隱 患。

例如

} }

error: …

就象樓房著火了,來不及從 樓梯一級一級往下走,可從視窗跳出火坑。所以我們主張少用、慎用goto 語句,而不是禁用。

《高質量C 程式設計指南》筆記

高質量 c 程式設計指南 是一本關於c 程式設計風格的指導 建議性的書,誕生已經有一年多了,初學c 閱讀此書,感覺甚好,收穫很大。這本書對初學者掌握好的編碼習慣有極大的幫助,對老手改進編碼方式也有好處。xml namespace prefix o ns urn schemas microsoft c...

《高質量程式設計指南》C 題目

今天晚上下了本 高質量程式設計指南 據說那幾個題目 20個碩士裡面,得50分以上的還沒有超過一半。如果能得滿分,林銳博士拜你為師。我就很感興趣的去做了一下,發現都很基本。我這個半路出家的人,居然也能做個80分。給了自己很大的信心,同時,也覺得很多問題,還是平時很愛犯的錯誤。今天把我的錯誤貼出來和大家...

高質量C C程式設計指南

1.如果引數是指標,且僅作輸入用,則應在型別前加const,以防止該指標在函式體內被意外修改 2.在函式體的 入口處 對引數的有效性進行檢查 在函式體的 出口處 對return語句的正確性和效率進行檢查 3.引用的一些規則如下 1 引用被建立的同時必須被初始化 指標則可以在任何時候被初始化 2 不能...