第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章 應在關聯性不強的語句間新增空行 一行 只做一件事...