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

2021-06-15 21:25:34 字數 4150 閱讀 1703

《高質量

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

xml:namespace prefix = o ns = "urn:schemas-microsoft-com:

office:office" />

這裡把讀書筆記拿出來共享,希望對大家有幫助。

標頭檔案:

為了防止標頭檔案被重複引用,應當用ifndef/define/endif結構產生預處理塊。

用#include <filename.h>格式來引用標準庫的標頭檔案(編譯器從標準庫目錄開始搜尋)。

用#include「filename.h」格式來引用非標準庫的標頭檔案(編譯器從使用者的工作目錄開始搜尋)。

標頭檔案中只存放「宣告」而不存放「定義」 。

**行:

在每個類宣告之後、每個函式定義結束之後都要加空行。

在乙個函式體內,邏揖上密切相關的語句之間不加空行,其它地方應加空行分隔。

一行**只做一件事情,如只定義乙個變數,或只寫一條語句。這樣的**容易閱讀,並且方便於寫注釋。

ifforwhiledo等語句自佔一行,執行語句不得緊跟其後。不論執行語句有多少都要加{}

盡可能在定義變數的同時初始化該變數(就近原則)。

空格:

關鍵字之後要留空格。

函式名之後不要留空格,緊跟左括號『(』,以與關鍵字區別。

『(』向後緊跟,『)』、『,』、『;』向前緊跟,緊跟處不留空格。

『,』之後要留空格,如function(x, y, z)。如果『;』不是一行的結束符號,其後要留空格,如for (initialization; condition; update)。

二元操作符的前後應當加空格。一元操作符前後不加空格。

象「[]」、「.」、「->」這類操作符前後不加空格。

對齊:

程式的分界符『』應獨佔一行並且位於同一列,同時與引用它們的語句左對齊。

之內的**塊在『{』右邊數格處左對齊。

長行拆分:

**行最大長度宜控制在7080個字元以內。

長表示式要在低優先順序操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進行適當的縮排,使排版整齊,語句可讀。

修飾符的位置:

應當將修飾符*和& 緊靠變數名。

注釋:

注釋是對**的「提示」,不是文件。不可喧賓奪主,太多了會讓人眼花繚亂。花樣要少。

邊寫**邊注釋,修改**同時修改相應的注釋,以保證注釋與**的一致性。不再有用的注釋要刪除。

注釋應當準確、易懂,防止注釋有二義性。

盡量避免在注釋中使用縮寫,特別是不常用縮寫。

注釋的位置應與被描述的**相鄰,可以放在**的上方或右方,不可放在下方。

當**比較長,特別是有多重巢狀時,應當在一些段落的結束處加注釋,便於閱讀。

命名規則:

識別符號應當直觀且可以拼讀,可望文知意,不必進行「解碼」。最好採用英文單詞或其組合,切忌使用漢語拼音來命名。

識符的長度應當符合「min-length && max-information」原則。

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

程式中不要出現僅靠大小寫區分的相似的識別符號。

程式中不要出現識別符號完全相同的區域性變數和全域性變數,會使人誤解。

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

全域性函式的名字應當使用「動詞」或者「動詞+名詞」(動賓片語)。

類的成員函式應當只使用「動詞」,被省略掉的名詞就是物件本身。

用正確的反義詞組命名具有互斥意義的變數或相反動作的函式等。

盡量避免名字中出現數字編號,除非邏輯上的確需要編號。

簡單的windows

應用程式命名規則:

類名和函式名用大寫字母開頭的單詞組合而成。

變數和引數用小寫字母開頭的單詞組合而成。

常量全用大寫的字母,用下劃線分割單詞。

靜態變數加字首s_(表示static)。

如果不得已需要全域性變數,則使全域性變數加字首g_(表示global

類的資料成員加字首m_(表示member),這樣可以避免資料成員與成員函式的引數同名。

為了防止某一軟體庫中的一些識別符號和其它軟體庫中的衝突,可以為各種識別符號加上能反映軟體性質的字首。

表示式和基本語句:

如果**行中的運算子比較多,用括號確定表示式的操作順序,避免使用預設的優先順序。

不要編寫太複雜的復合表示式。

不要有多用途的復合表示式。

不要把程式中的復合表示式與「真正的數學表示式」混淆。

不可將布林變數直接與truefalse或者10進行比較。

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

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

應當將指標變數用「==」或「!=」與null 比較。

不可在for迴圈體內修改迴圈變數,防止for迴圈失去控制。

每個case 語句的結尾不要忘了加break,否則將導致多個分支重疊(除非有意使多個分支重疊)。

不要忘記最後那個default 分支。即使程式真的不需要default 處理,也應該保留。

常量:

在c++ 程式中只使用const 常量而不使用巨集常量(#define)。

需要對外公開的常量放在標頭檔案中,不需要對外公開的常量放在定義檔案的頭部。

如果某一常量與其它常量密切相關,應在定義中包含這種關係,而不應給出一些孤立的值。

函式設計:

引數的書寫要完整,如果函式沒有引數,則用void 填充。

如果引數是指標,且僅作輸入用,則應在型別前加const,以防止該指標在函式體內被意外修改。

如果輸入引數以值傳遞的方式傳遞物件,則宜改用「const &」方式來傳遞,這樣可以省去臨時物件的構造和析構過程,從而提高效率。

避免函式有太多的引數,引數個數盡量控制在5個以內。

不要省略返回值的型別。

函式名字與返回值型別在語義上不可衝突。

不要將正常值和錯誤標誌混在一起返回。正常值用輸出引數獲得,而錯誤標誌用return語句返回。

有時候函式原本不需要返回值,但為了增加靈活性如支援鏈式表達,可以附加返回值。

在函式體的「入口處」,對引數的有效性進行檢查。

在函式體的「出口處」,對return語句的正確性和效率進行檢查。

1return語句不可返回指向「棧記憶體」的「指標」或者「引用」,因為該內存在函式體結束時被自動銷毀。

2)要搞清楚返回的究竟是「值」、「指標」還是「引用」

3)如果函式返回值是乙個物件,要考慮return語句的效率。

函式的功能要單一,不要設計多用途的函式。

函式體的規模要小,盡量控制在50行**之內。

盡量避免函式帶有「記憶」功能。相同的輸入應當產生相同的輸出。

用於出錯處理的返回值一定要清楚,讓使用者不容易忽視或誤解錯誤情況。  

高質量程式設計指南(筆記)

你使用乙個語言特徵是因為你需要它,而不是因為它存在 bjarne stroustrup 首先掌握語言的特徵及及其使用方法,再學習具體的語言實現才是語言學習之道!我們不能因為bjarne說過那樣的話就不去使用甚至不去學習c c 的高階特性。要想高效的使用一種語言,必須要了解它的各個特徵和他們的使用方法...

C 高質量程式設計指南筆記(三)

define c語言的巨集常量 const c 編譯器可以對前者進行型別安全檢查。1 在c 中只使用const常量而不使用巨集常量,即const常量完全取代巨集常量 2 需要對外公開的常量放再標頭檔案中,不需要對外公開的常量放在定義檔案的頭部。為便於管理,可以把不同模組的常量集中存放在乙個公共標頭檔...

C 高質量程式設計指南筆記(七)

1 用const修飾函式的引數時,const 只能修飾輸入引數。1 如果輸入引數採用 指標傳遞 那麼加const修飾可以防止意外的改動該指標,起到保護作用。2 如果採用的是值傳遞,由於函式將自動產生臨時變數用於賦值該函式,該輸入引數本來就無需改動,所以不要加const 例如 不要將void func...