ZZC語言代碼風格

程序員之路--關於代碼風格

優秀的代碼風格如同一身得體的打扮,可以給人以良好的印象。初學程序設計,首先必須創建良好的編程習慣,這其中就包括代碼風格。本文就代碼風格中的幾個重點問題進行了討論,並在文後給出了一份優秀的代碼做爲風格模板。代碼風格沒必要花費太多專門的時間研究,在使用中不斷模仿模板代碼,輕輕鬆鬆就能寫出「專業的代碼」。



1、80字符,代碼行極限

  不管時空怎麼轉變,世界怎樣改變,一行80字符應始終銘記心間。古老的Unix終端以80列的格式顯示文本,爲了讓源代碼與手冊具備最佳的可讀性,Unix系統始終堅持着80列的傳統。80列很少很多,足夠寫出一行有意義的代碼,同時也足夠顯示在終端屏幕,足夠打印在A4紙上。雖然時至今日,咱們的屏幕分辨率早已足夠高,一行可以顯示的內容遠超超過80字符,但咱們的優秀傳統已經造成──幾乎全部的Unix/Linux內核源代碼以及聯機用戶手冊都嚴格地遵照着80列極限。若是你正好在使用Windows平臺下的Dev
C++,你是否有注意到代碼編輯框裏那條細細的灰色豎線?不錯,那正是代碼行極限。除了HTML、XML等冗長繁複的標記式語言,幾乎全部的語言都須要嚴格遵照代碼行極限,這包括C、C++、Java、C#、Python、PHP等等。不過有時,好比當PHP跟HTML打交道的時候,這個限制是能夠暫時放鬆的。過長的代碼行老是很差的,好的代碼要始終保持苗條的身材。



2、Tab仍是Space,衆說紛紜的縮進方式

  代碼離不開縮進,關於縮進主要有兩個爭論,一個是該用空格(Space)仍是用製表符(Tab),另一個是該用4格縮進仍是8格縮進甚至都不是。

  先來談談Space與Tab的問題。堅持用Space的程序員會告訴你,若是你歷來都不用Tab,那麼你的代碼放到全部的地方看都是同樣的。沒錯,這是用Space縮進的優勢,惋惜的是,這是它惟一的優勢。代碼層次越多,內層代碼最前面的縮進便越多,這意味着你須要敲不少不少次空格。即便你能忍受不厭其煩地按空格鍵直到它壞掉,你也必定會被IDE老是自做聰明地插入一些Tab字符的行爲煩惱不已。建議老是使用Tab縮進,由於幾乎全部的代碼(不只僅是C代碼)都在使用Tab縮進。

  Tab究竟是4格仍是8格?這是Tab縮進會被某些人詬病的根源。當你寫程序時使用的Tab大小與別人讀程序時使用的Tab大小不一樣時,再漂亮的排版也會變得雜亂無章。標準的Tab是8格的,而不幸的是,幾乎全部的Windows平臺下的IDE,包括Visual
Studio、Dev
C++,甚至跨平臺的Eclipse等,都默認使用4格Tab。我使用的FreeBSD系統的全部的內核源代碼都採用8格縮進,因此我一直堅持使用8格縮進。也許你不習慣太大的間距,若是不是在Unix平臺下,或者不是C語言,那就採用4格Tab吧。若是你在Unix下編寫C代碼,使用8格的標準Tab是更好的習慣。



3、折行原則,容易被忽略的角落

  既然有代碼行極限,不少狀況下咱們不得不斷開一個完整的代碼行,這就帶來了一個問題:折行後應該如何縮進?好的作法是,第一次折行後,在原來縮進的基礎上增長1/2的Tab大小的空格,以後的折行所有對齊第二行。可能這樣的文字描述過於晦澀了,仍是舉個例子罷(以8格縮進爲例):

if
(value > a && value > b && value > c && value
< d && value < e && value < f    value < h
&& value < h) { /* 注意折行後的縮進 */         value = value +
1;         value = value * value * value * value * value * value * value *
value             * value * value + value * value * value * value * value *
value             * value * value; /* 注意再次折行後的縮進
*/}  顯然這個段代碼沒有任何實際用處,只是爲了說明折行縮進而編造的。



4、無處不在的空格,無處不在的空行

  須要空格的位置有:
  1)if、while、switch等關鍵字與以後的左括號(之間。
  2)左花括號{以前。
  3)雙目運算符兩側,例如p
== NULL。
  4)逗號,與分號;以後,例如for (i = 0; i < 10;
i++)。   

  不要空格的位置有:
  1)函數名與以後的左括號(,包括帶參數的宏與以後的左括號(,例如max(a,
b)。
  2)分號;與冒號:以前。
  3)左括號(右邊,右括號)左邊,例如if (p ==
NULL)。

  須要空行的位置有:
  1)函數的定義以前、函數的定義以後
  2)一組聯繫緊密的代碼段以前和以後

  這些規則並不徹底,當你碰到上面沒有列舉出來的狀況時,請參考本文提供的模板代碼。



5、左花括號的爭議──換行乎?不換乎? 

  這又是一個仁者見仁智者見智的問題了。從使代碼更清晰的角度看,做爲代碼段開頭標識的左花括號{應該另起一行:

if
(p ==
NULL){        printf("error!\n");        exit(0);}  但是,這看起來實在不夠緊湊,因此大部分的C代碼(至少Unix上如此)都採用了這樣的方式:

if
(p == NULL)
{        printf("error!\n");        exit(0);}  個人建議是採用後者,這會使你的代碼顯得更加緊湊,也更加專業。須要說明一個特例,在定義函數時,咱們老是要給左花括號{換行:

static
intmaxint(int a, int b){        return a > b ? a :
b;}

6、堅持美觀、靈活對待

  代碼風格遠遠不止上面提到的五點,事實上,不少公司都有規定的代碼風格,包括命名規則、縮進規則等。若是你在一個開發團隊中,應該始終以團隊的標準爲主,而若是你只是在學習C語言並試着造成本身的代碼風格,我將在這裏給一份最專業的源代碼供你參考。你的任何疑問,在這份代碼裏必定能夠找到答案:Code
Style(注意查看時將Tab設置爲8格)。這份代碼來自優秀的FreeBSD操做系統內核源代碼(版本6.2),你必定不會置疑它的權威性。更多內容請參考FreeBSD內核代碼編寫規範,你也許須要一些耐心才能讀完這篇英文文檔。程序員

相關文章
相關標籤/搜索