《高質量C C 程式設計》學習筆記1(基本事項)

2021-04-12 19:49:48 字數 3125 閱讀 4802

第1 章 檔案結構

標頭檔案的結構 

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

【規則1-2-2】用 #include 格式來引用標準庫的標頭檔案(編譯器將從標準庫目錄開始搜尋)。

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

// 版權和版本宣告見示例1-1,此處省略。

#ifndef graphics_h // 防止graphics.h 被重複引用

#define graphics_h

#include // 引用標準庫的標頭檔案

⋯#include 「myheader.h」 // 引用非標準庫的標頭檔案

⋯void function1(⋯); // 全域性函式宣告

⋯class box // 類結構宣告

;#endif

可將標頭檔案儲存於include 目錄,將定義檔案儲存於source 目錄

第2 章 程式的版式

【規則2-2-1】一行**只做一件事情,如只定義乙個變數,或只寫一條語句。這樣

的**容易閱讀,並且方便於寫注釋。

【規則2-2-2】if、for、while、do 等語句自佔一行,執行語句不得緊跟其後。不論執行語句有多少都要加{}。這樣可以防止書寫失誤。(關於這條規則,可以在實際的程式設計中具體問題具體分析)

【建議2-2-1】盡可能在定義變數的同時初始化該變數(就近原則)

【規則2-3-1】關鍵字之後要留空格。象const、virtual、inline、case 等關鍵字之

後至少要留乙個空格,否則無法辨析關鍵字。象if、for、while 等關鍵字之後應留

乙個空格再跟左括號『(』,以突出關鍵字。

【規則2-3-2】函式名之後不要留空格,緊跟左括號『(』,以與關鍵字區別。

【規則2-3-3】『(』向後緊跟,『)』、『,』、『;』向前緊跟,緊跟處不留空格。

【規則2-3-4】『,』之後要留空格,如function(x, y, z)。如果『;』不是一行的結束

符號,其後要留空格,如for (initialization; condition; update)。

【規則2-3-5】賦值操作符、比較操作符、算術操作符、邏輯操作符、位域操作符,

如「=」、「+=」 「>=」、「<=」、「+」、「*」、「%」、「&&」、「||」、「<<」,「^」等二元操作符的前後應當加空格。

【規則2-3-6】一元操作符如「!」、「~」、「++」、「--」、「&」(位址運算子)等前後不加空格。

【規則2-3-7】象「[]」、「.」、「->」這類操作符前後不加空格。

【建議2-3-1】對於表示式比較長的for 語句和if 語句,為了緊湊起見可以適當地去

掉一些空格,如for (i=0; i<10; i++)和if ((a<=b) && (c<=d))

【規則2-5-2】長表示式要在低優先順序操作符處拆分成新行,操作符放在新行之首(以

便突出操作符)。拆分出的新行要進行適當的縮排,使排版整齊,語句可讀。

【規則2-6-1】應當將修飾符 * 和 &緊靠變數名

例如:char*name;

int*x, y; // 此處y 不會被誤解為指標

第3 章 命名規則

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

例如windows 應用程式的識別符號通常採用「大小寫」混排的方式,如addchild。 而unix 應用程式的識別符號通常採用「小寫加下劃線」的方式,如add_child。

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

例如:float value;

float oldvalue;

float newvalue;

【規則3-1-7】全域性函式的名字應當使用「動詞」或者「動詞+名詞」(動賓片語)。

drawbox(); // 全域性函式

第4 章 表示式和基本語句

【規則4-2-3】不要把程式中的復合表示式與「真正的數學表示式」混淆。

例如:if (a < b < c) // a < b < c 是數學表示式而不是程式表示式,並不表示if ((a【規則4-3-1】不可將布林變數直接與true、false 或者1、0 進行比較。

【規則4-3-2】應當將整型變數用「==」或「!=」直接與0 比較。

【規則4-3-3】不可將浮點變數用「==」或「!=」與任何數字比較。

假設浮點變數的名字為x,應當將

if (x == 0.0) // 隱含錯誤的比較

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

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

【規則4-3-4】應當將指標變數用「==」或「!=」與null 比較。

【建議4-4-1】在多重迴圈中,如果有可能,應當將最長的迴圈放在最內層,最短的

迴圈放在最外層,以減少cpu 跨切迴圈層的次數。

【建議4-4-2】如果迴圈體內存在邏輯判斷,並且迴圈次數很大,宜將邏輯判斷移到迴圈體的外面。(如果n很大,則有必要進行如此的優化,否則,效果不明顯

示例4-4(c)的程式比示例4-4(d)多執行了n-1 次邏輯判斷。並且由於前者老要進行邏輯判斷,打斷了迴圈「流水線」作業,使得編譯器不能對迴圈進行優化處理,降低了效率。如果n 非常大,最好採用示例4-4(d)的寫法,可以提

高效率。如果n 非常小,兩者效率差別並不明顯,採用示例4-4(c)的寫法比較好,因為程式更加簡潔。

for (i=0; i4-4(c)

if (condition)

{for (i=0; i4-4(d)

表4-4(c) 效率低但程式簡潔 表4-4(d) 效率高但程式不簡潔

【規則4-6-2】switch,不要忘記最後那個default 分支。即使程式真的不需要default 處理,也應該保留語句 default : break; 這樣做並非多此一舉,而是為了防止別人誤以

為你忘了default 處理。

C C 高質量程式設計筆記

怕忘記的一些重點,呵呵。1 運算子優先順序 sizeof,正負 指標 2 if 語句判斷條件 布林型if flag or if flag 整型if value 0 or if value 0 浮點型if x epsinon x epsinon 指標if p null or if p null 3 迴...

高質量程式設計C C

一 請填寫bool float,指標變數與 零值 比較的 if 語句。10 分 請寫出 bool flag 與 零值 比較的 if 語句。3 分 標準答案 if flag if flag 如下寫法均屬不良風格,不得分。if flag true if flag 1 if flag false if f...

高質量c c 程式設計

第1章 為防止標頭檔案被重複引用,應當用 ifndef define endif 結構產生預處理塊 使用 include引用標準庫標頭檔案,使用 include filename.h 引用非標準庫標頭檔案 標頭檔案中只存放 宣告 不存放 定義 第2章 應在關聯性不強的語句間新增空行 一行 只做一件事...