高質量c c 程式設計學習之二 命名規則

2021-08-04 03:31:07 字數 3026 閱讀 3649

高質量c/c++程式設計學習之二:命名規則

注:本文主要節選《高質量c/c++程式設計指南》

比較著名的命名規則當推 microsoft 公司的「匈牙利」法,該命名規則的主要思想是 「在變數和函式名中加入字首以增進人們對程式的理解」。例如所有的字元變數均以 ch 為字首,若是指標變數則追加字首 p。如果乙個變數由 ppch 開頭,則表明它是指向字元 指標的指標。

"匈牙利」法大的缺點是煩瑣,例如 int    i,  j,  k;   float  x,  y,  z; 

倘若採用「匈牙利」命名規則,則應當寫成 

int    ii,  ij,  ik;  // 字首 i 表示 int 型別 

float  fx,  fy,  fz;  // 字首 f 表示 float 型別 

如此煩瑣的程式會讓絕大多數程式設計師無法忍受。 據考察,沒有一種命名規則可以讓所有的程式設計師贊同,程式設計教科書一般都不指 定命名規則。命名規則對軟體產品而言並不是「成敗悠關」的事,我們不要化太多精力 試圖發明世界上好的命名規則,而應當制定一種令大多數專案成員滿意的命名規則, 並在專案中貫徹實施。 

3.1 共性規則

本節論述的共性規則是被大多數程式設計師採納的,我們應當在遵循這些共性規則的前 提下,再擴充特定的規則,如 3.2 節。 

【規則 3-1-1】識別符號應當直觀且可以拼讀,可望文知意,不必進行「解碼」 。 識別符號好採用英文單詞或其組合,便於記憶和閱讀。切忌使用漢語拼音來命名。 程式中的英文單詞一般不會太複雜,用詞應當準確。例如不要把 currentvalue 寫成 nowvalue。 

【規則 3-1-2】識別符號的長度應當符合「min-length && max-information」原則。 幾十年前老 ansi c 規定名字不准超過 6 個字元,現今的 c++/c 不再有此限制。一 般來說,長名字能更好地表達含義,所以函式名、變數名、類名長達十幾個字元不足為 怪。那麼名字是否越長約好?不見得! 例如變數名 maxval 就比 maxvalueuntiloverflow 好用。單字元的名字也是有用的,常見的如 i,j,k,m,n,x,y,z 等,它們通常可用作函式 內的區域性變數。 

【規則 3-1-3】命名規則盡量與所採用的作業系統或開發工具的風格保持一致。 例如 windows 應用程式的識別符號通常採用「大小寫」混排的方式,如 addchild。而 unix 應用程式的識別符號通常採用「小寫加下劃線」的方式,如 add_child。別把這兩類風格混在一起用。 

【規則 3-1-4】程式中不要出現僅靠大小寫區分的相似的識別符號。 例如: int  x,  x;  // 變數 x 與 x 容易混淆 void foo(int x); // 函式 foo 與 foo 容易混淆 void foo(float x); 

【規則 3-1-5】程式中不要出現識別符號完全相同的區域性變數和全域性變數,儘管兩者的 作用域不同而不會發生語法錯誤,但會使人誤解。 

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

float  value;

float oldvalue;

float newvalue;

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

drawbox();  // 全域性函式   

box->draw(); // 類的成員函式

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

int minvalue;

int maxvalue;

int setvalue(…);

int getvalue(…);

【建議 3-1-1】盡量避免名字中出現數字編號,如 value1,value2 等,除非邏輯上的 確需要編號。這是為了防止程式設計師偷懶,不肯為命名動腦筋而導致產生無意義的名 字(因為用數字編號省事)。 

3.2 簡單的 windows 應用程式命名規則

作者對「匈牙利」命名規則做了合理的簡化,下述的命名規則簡單易用,比較適合 於 windows 應用軟體的開發。 

【規則 3-2-1】類名和函式名用大寫字母開頭的單詞組合而成。 例如:  

class node;     // 類名 

class leafnode; // 類名

void draw(void); // 函式名

void setvalue(int value); // 函式名

【規則 3-2-2】變數和引數用小寫字母開頭的單詞組合而成。 例如:

bool flag;  

int drawmode;

【規則 3-2-3】常量全用大寫的字母,用下劃線分割單詞。 例如:

const int max = 100;  

const int max_length = 100;

【規則 3-2-4】靜態變數加字首 s_(表示 static)。 例如: 

void init(…) 

【規則 3-2-5】如果不得已需要全域性變數,則使全域性變數加字首 g_(表示 global)。 例如:

int g_howmanypeople; // 全域性變數 

int g_howmuchmoney; // 全域性變數

【規則 3-2-6】類的資料成員加字首 m_(表示 member),這樣可以避免資料成員與 成員函式的引數同名。 例如:

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

【規則 3-2-7】為了防止某一軟體庫中的一些識別符號和其它軟體庫中的衝突,可以為 各種識別符號加上能反映軟體性質的字首。例如三維圖形標準 opengl 的所有庫函式 均以 gl 開頭,所有常量(或巨集定義)均以 gl 開頭。 

高質量C C程式設計指南(三)命名規則

目錄 一 共性規則 二 簡單的windows應用程式命名規則 規則3 1 1 識別符號應當直觀且可以拼讀,可望文知意,不必進行 解碼 識別符號最好採用英文單詞或其組合,便於記憶和閱讀。切忌使用漢語拼音來命名。程式中的英文單詞一般不會太複雜,用詞應當準確。例如不要把currentvalue寫成nowv...

《高質量C C C命名規則

書中所講的是微軟的 匈牙利命名規則 但是個人比較傾向與linux的命名規則,就先記錄linux下的命令規則,以後用到微軟的再記錄吧。1 變數名必須有一定的意義,並且意義準確。例如有乙個變數用於儲存圖書的數目,可以命名為number of book或者num of book。不建議使用i,因為它沒有意...

高質量程式設計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...