天天看點

C/C++代碼格式規則中比較有争議的幾處

    原位址:http://bbs.csdn.net/topics/320120108

  從一個人的代碼格式,其實可以猜出此人的C/C++大緻水準,凡是寫過正式項目的人,代碼風格不會太差的,有些代碼風格規則得到了普遍認同,有些确仍存争議。

    下面列舉一些仍存争議的代碼風格。

1.空參數的函數是否得用fuc(void)格式

    多次在一些書裡看到空參數的函數得用void來填補形參表,但是在實際程式設計以及見到過的許多項目裡——無論是開源項目還是微軟的一些庫,fuc()仍然是很普遍的寫法。

    觀點:是否加void對于代碼邏輯本身沒有任何影響,可讀性上差别也不大,除非項目硬性要求或者初學的時候養成了習慣,個人感覺是不是一定要加void不那麼重要。正因為如此,fuc()仍然大行其道,通常也不被看做明顯的風格缺陷。

2.大括号的對齊

C/C++ code

?

if

()

{

}

if

(){

}

    這兩種代碼那種風格更好呢?VC、VA、Eclipse的自動格式化傾向于前者,但是有許多開源項目和教材上的代碼又明顯是由後者,誰優誰劣恐怕又要牽涉到作業系統和程式設計環境的口水仗了……很明顯,微軟提倡的代碼風格明顯屬于前者,而後者在開源項目中大量出現。

    觀點:入鄉随俗,在VC裡寫後者不倫不類,跟着VS+VA的自動格式化走吧;Linux下倒是随便,看項目組整體的要求。

3.單行循環和單行條件的大括号是否省略

    一般書上說任何時候都加大括号是比較好的選擇。當然,保證沒有歧義的情況下(主要是if、else的歧義),不加括号也能讓代碼顯得更緊湊。

    提到這點主要是反駁一個觀點——有人說加不加括号會造成效率差别……這完全是無稽之談,經過測試,在VS2008中,無論什麼優化選項,單行循環加不加括号生成的彙編代碼都是一樣的,如果你是TC測出的效率差别,那隻能說編譯器太爛了!

    觀點:我個人的觀點倒不像書上那麼絕對(任何時候都加)。我感覺條件語句加括号避免歧義是應該的;而單行循環一般沒有歧義,而且不加括号顯得很緊湊,我推薦不加;那種多層的循環和條件,加括号增加可讀性,最好加上。

4,變量初始化

    本來沒有任何争議,但是無論譚浩強的書還是“權威”的K&R的書做的都不好,才造成了許多人認為不初始化才是“權威”。

    觀點:沒什麼說的,不初始化的人一看就知道沒寫過幾行代碼,沒有為那種因為不初始化而造成的bug煩惱過。

5.變量聲明位置

    由于受變量位置較嚴格的C标準影響,許多人似乎喜歡在頭部一股腦的把變量聲明完。這自然是有道理的,純C編譯器要求這樣聲明(比如VS2005、VS2008加上/TC選項或者使用extern "C")。不過C++裡的相容的C就沒這個限制了,因為C++可能有較大的自定義類型,開始就聲明有效率損失。

    觀點:請看你的編譯器,C++的自由方式自然好,但如果編譯器限制就沒辦法了。我提醒注意的是,如果C++方式編譯,就沒有必要死抱C的聲明格式了。

6.短代碼的換行

i++;j--;

{

return

0;}

。。。。。

    在項目代碼中我們經常能看到這樣的代碼,因為短小,就沒有換行了。

    觀點:我看這種代碼總是不舒服,特别是那個return 0;我甯可直接把括号去了……  

繼續閱讀