C++代碼書寫規(guī)范——給新手程序員的一些建議

代碼就是程序員的面子,無論是在工作中在電腦上寫程序代碼還是在面試時(shí)在紙上寫演示代碼我們都希望寫出整潔,優(yōu)雅的代碼。特別在工作中當(dāng)我們碰到需要維護(hù)別人的代碼,或者是多人參與一個(gè)項(xiàng)目大家一起寫代碼的時(shí)候,如果碰到一些丑陋的代碼,我們還要看懂并且修改它的時(shí)候,那種難受,肯定會(huì)讓我們回想起多年以前自己還是新手程序員的時(shí)候,寫下的那些丑陋的代碼,并且深深內(nèi)疚于將它們留給了我們的后繼者,不知道他們和它們是否還安好。所以,強(qiáng)調(diào)代碼的規(guī)范性,寫出整潔,優(yōu)雅,可讀性高的代碼應(yīng)該是成為一個(gè)合格的程序員的第一步。這里我就拋磚引玉,給大家一些關(guān)于C++代碼規(guī)范性的一些建議。

一、關(guān)于添加空格和空行的一些建議

寫代碼的時(shí)候添加良好風(fēng)格的空格和空行可以使代碼看上去更整潔,布局更清晰。

1.空格

建議一:函數(shù)名之后不要留空格,緊跟左括號‘ (’,以與關(guān)鍵字區(qū)別。

建議二:象 if 、 for 、 **while **等關(guān)鍵字之后應(yīng)留一個(gè)空格再跟左括號‘ (’,以突出關(guān)鍵字。

建議三:‘,’之后要留空格。在 for 語句中的‘;’其后要留空格,如 for (i=0; i<5; i++)。

建議四:對于表達(dá)式比較長的 **for **語句和 **if **語句,為了緊湊起見可以適當(dāng)?shù)厝サ粢恍┛崭瘛?/p>

建議五:賦值操作符、比較操作符、算術(shù)操作符、邏輯操作符、位域操作符,如“ =”、“ +=” “>=”、“ <=”、“ +”、“ *”、“ %”、“ &&”、“ <<”、 “ ^”等二元操作符的前后應(yīng)當(dāng)加空格。

建議六:一元操作符如“ !”、“ ~”、“ ++”、“ --”、“ &”(地址運(yùn)算符)等前后不加空格。

下面這段代碼就會(huì)顯得不優(yōu)雅,看著有些別扭。

//不好的風(fēng)格

void func (int a,int b,int c,int d)

{

if(a>=0)

{

if(a>=b&&c>=d)

{

int * x = & a;

...//doSomeThing();

}

}

}

我們希望將它改為這樣。

//良好的風(fēng)格

void func(int a, int b, int c, int d)//建議一,建議三

{

if (a >= 0)//建議二,建議五

{

if ((a>=b) && (c>=d))//建議四

{

int *x = &a; //建議六

...//doSomeThing();

}

}

}

還有這樣的for語句for (i = 0; i < 5; i ++),就屬于空格濫用了,應(yīng)該改為for (i=0; i<5; i++)。

2.空行

建議一:在實(shí)現(xiàn)函數(shù)時(shí),函數(shù)與函數(shù)之間應(yīng)加空行。

建議二:在一個(gè)函數(shù)體內(nèi),邏揖上密切相關(guān)的語句之間不加空行,其它地方應(yīng)加空行。

當(dāng)程序中沒有空行時(shí)是這樣的。

void func1()

{

while (condition)

{

...//doSomeThing();

if (condition)

{

...//doSomeThingRelated();

}

else

{

...//doSomeThingRelated();

}

...//doSomeThing();

}

}

void func2()

{

...//doSomeThing();

}

而良好的空行不緊能使代碼看上去更整潔,代碼邏輯也會(huì)更清晰。

//良好的風(fēng)格

void func1()

{

while (condition)

{

...//doSomeThing();

if (condition)

{

...//doSomeThingRelated();

}

else

{

...//doSomeThingRelated();

}

...//doSomeThing();

}

}

void func2()

{

...//doSomeThing();

}

二、關(guān)于代碼行格式的一些建議

建議一: 一行代碼只做一件事情 。

建議二:長表達(dá)式要在低優(yōu)先級操作符處拆分成新行,操作符放在新行之首 (以便突出操作符)。拆分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語句可讀。

//不好的風(fēng)格

void func()

{

int veryVeryLongWidth, veryVeryLongHeight;

if ((veryVeryLongWidth > veryVeryLongHeight) || (veryVeryLongWidth < veryVeryLongHeight))doSomeThing();

}

過長的代碼行無論是書寫還是閱讀對人來說都不是一個(gè)美好的體驗(yàn),所以我們建議以上代碼要這樣寫。

//良好的風(fēng)格

void func()

{

int veryVeryLongWidth;

int veryVeryLongHeight;

if ((veryVeryLongWidth > veryVeryLongHeight)

|| (veryVeryLongWidth < veryVeryLongHeight))

{

doSomeThing();

}

}

三、關(guān)于命名的一些建議

建議一:變量,函數(shù),文件命名應(yīng)該具有描述性,最好采用英文單詞或其組合( 不要使用拼音,或者無意義的abc之類的,除了像for (i=0; i<5; i++)中的i這樣的 ),以便記憶和閱讀。

建議二:類名和函數(shù)名用大寫字母開頭的單詞組合而成。

例如:

class Book;

class ReadBook;

void Draw();

void DrawImage();

建議三:變量和參數(shù)用小寫字母開頭的單詞組合而成。

例如:

int value;

void SetValueMode(int valueMode);

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

例如:

const int MAX = 100;

const int MAX_LENGTH = 100;

建議五:全局變量加前綴 g_ (表示 global )。靜態(tài)變量加前綴 s_ (表示 static )。類的成員變量加前綴 m_ (表示 member )。

例如:

int g_maxValue;

static int s_maxValue;

void Object::SetValue(int maxValue)

{

m_maxValue = maxValue;

}

四、關(guān)于添加注釋的一些建議

在C++中注釋主要有兩種,程序塊的注釋常采用“ //”,行注釋一般采用“ //…”。注釋主要用在3個(gè)地方。1、版權(quán)申明,2、函數(shù)說明,3、重要或復(fù)雜代碼提示。對于前兩種,每個(gè)人或者每個(gè)公司都有個(gè)人的規(guī)范和習(xí)慣,這里只要大家在公司內(nèi)部統(tǒng)一即可。關(guān)于第三種給重要或復(fù)雜代碼添加提示,我們有一下幾點(diǎn)建議。

建議一: 注釋的確很重要,但是最好的代碼本身就是文檔(self-document),類型和變量命名意義明確要比通過注釋解釋模糊命名好得多

建議二:邊寫代碼邊注釋,修改代碼同時(shí)修改相應(yīng)的注釋,以保證注釋與代碼的一致性。不再有用的注釋要記得刪除。

建議三:注釋的位置應(yīng)與被描述的代碼相鄰,可以放在代碼的上方或右方,不可放在下方。

五、關(guān)于類中成員聲明次序的一些建議

建議一:在類中按照public:、protect:、private:的次序聲明。如果那一塊沒有直接忽略。

建議二:在同一塊中按照1、結(jié)構(gòu)體和枚舉,2、常量,3、構(gòu)造函數(shù),4、析構(gòu)函數(shù),5、成員函數(shù),6、成員變量的次序聲明。

六、關(guān)于if語句中的變量“與零值比較”的一些建議

建議一:不可將布爾變量直接與 TRUE 、 **FALSE **或者 1 、 **0 **進(jìn)行比較。

假設(shè)布爾變量名字為 flag,它與零值比較的標(biāo)準(zhǔn) if 語句如下:

if (flag) // 表示 flag 為真

if (!flag) // 表示 flag 為假

建議二:應(yīng)當(dāng)將整型變量用“ ==”或“!=”直接與 0 比較。

假設(shè)整型變量的名字為 value,它與零值比較的標(biāo)準(zhǔn) if 語句如下:

if (value == 0)

if (value != 0)

也可以將0放在比較運(yùn)算符前面。

if (0 == value)

if (0 != value)

這時(shí)如果將“==”寫成“=”,編譯器會(huì)報(bào)錯(cuò)。

建議三:不可將浮點(diǎn)變量用“ ==”或“!=”與任何數(shù)字比較。無論是 float 還是 double 類型的變量,都有 精度限制 。所以一定要避免將浮點(diǎn)變量用“ ==”或“!=”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“ >=”或“ <=”形式。

假設(shè)浮點(diǎn)變量的名字為 x,應(yīng)當(dāng)將

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

修改為

const float EPSINON = 0.00001;

if ((x>=-EPSINON) && (x<=EPSINON))

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

建議四:應(yīng)當(dāng)將指針變量用“ ==”或“! =”與** NULL **比較。

假設(shè)指針變量的名字為 p,它與零值比較的標(biāo)準(zhǔn) if 語句如下:

if (p == NULL) // p 與 NULL 顯式比較,強(qiáng)調(diào) p 是指針變量

if (p != NULL)

其實(shí)做為一個(gè)學(xué)習(xí)者,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子特別重要這里我推薦一個(gè)C/C++基礎(chǔ)交流583650410,不管你是小白還是轉(zhuǎn)行人士歡迎入駐,大家一起交流成長。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容