c語言的編程風(fēng)格
第一章:縮進格式 理由是:縮進的大小是為了清楚的定義一個塊的開始和結(jié)束.特別是當(dāng)你已經(jīng)在計算機前面呆了20多個小時了以后,你會發(fā)現(xiàn)一個大的縮進格式使得你對程序的理解更容易. 現(xiàn)在,有一些人說,使用8個字符的縮進使得代碼離右邊很近,在80個字符寬度的終端屏幕上看程序很難受.回答是,但你的程序有3個以上的縮進的時候,你就應(yīng)該修改你的程序. 第二章:大符號的位置 if (x is true) { we do y } 需要注意的是結(jié)束的括號在它所占的那一行是空的,__除了__它跟隨著同一條語句的繼續(xù)符號.如"while"在do-while循環(huán)中,或者"else"在if語句中.如下: do { body of do-loop } while (condition); 理由: K&R. 第三章:命名系統(tǒng) C是一種簡潔的語言,那么,命名也應(yīng)該是簡潔的.同MODULE-2以及ASCAL語言不同的是,C程序員不使用諸如ThisVariableIsATemporaryCounter之類的命名方式.一個C語言的程序員會將之命名為"tmp",這很容易書寫,且并不是那么難以去理解. 然而,當(dāng)混合類型的名字不得不出現(xiàn)的時候,描述性名字對全局變量來說是必要的了.調(diào)用一個名為"foo"全局的函數(shù)是很讓人惱火的.全局變量(只有你必須使用的時候才使用它) ,就象全局函數(shù)一樣,需要描述性的命名方式.假如你有一個函數(shù)用來計算活動用戶的數(shù)量,你應(yīng)該這樣命名--"count_active_users()"--或另外的相近的形式,你不應(yīng)命名為"cntusr()". 有一種稱為Hungarian命名方式,它將函數(shù)的類型編碼寫入變量名中,這種方式是腦子有毛病的一種表現(xiàn)---編譯器知道這個類型而且會去檢查它,而這樣只會迷惑程序員. --知道為什么Micro$oft為什么會生產(chǎn)這么多"臭蟲"程序了把!!. 局部變量的命名應(yīng)該短小精悍.假如你有一個隨機的整數(shù)循環(huán)計數(shù)器,它有可能有"i",如果沒有任何可能使得它能被誤解的話,將其寫作"loop_counter"是效率低下的.同樣的,""tmp"可以是任何臨時數(shù)值的函數(shù)變量. 如果你害怕混淆你的局部變量的名字,還有另外一個問題,就是稱 第四章:函數(shù) 一個函數(shù)的最大長度和函數(shù)的復(fù)雜程度以及縮進大小成反比.于是,如果你已經(jīng)寫了簡單但長度較長的的函數(shù),而且你已經(jīng)對不同的情況做了很多很小的事情,寫一個更長一點的函數(shù)也是無所謂的. 然而,假如你要寫一個很復(fù)雜的函數(shù),而且你已經(jīng)估計到假如一般人讀這個函數(shù),他可能都不知道這個函數(shù)在說些什么,這個時候,使用具有描述性名字的有幫助的函數(shù). 另外一個需要考慮的是局部變量的數(shù)量.他們不應(yīng)該超過5-10個,否則你有可能會出錯.重新考慮這個函數(shù),將他們分割成更小的函數(shù).人的大腦通常可以很容易的記住7件不同的事情,超過這個數(shù)量會引起混亂.你知道你很聰明,但是你可能仍想去明白2周以前的做的事情. 第5章:注釋 通常情況下,你的注釋是說明你的代碼做些什么,而不是怎么做的.而且,要試圖避免將注釋插在一個函數(shù)體里:假如這個函數(shù)確實很復(fù)雜,你需要在其中有部分的注釋,你應(yīng)該回到第四章看看.你可以寫些簡短的注釋來注明或警告那些你認(rèn)為特別聰明(或極其丑陋)的部分,但是你必須要避免過多.取而代之的是,將注釋寫在函數(shù)前,告訴別人它做些什么事情,和可能為什么要這樣做. 第六章:你已經(jīng)深陷其中了. 于是,你可以要么不要使用GUN emacs,要么讓它使用sanervalules.使用后者,你需要將如下的語句輸入到你的.emacs文件中.(defun linux-c-mode() "C mode with adjusted defaults for use with the Linux kernel."(interactive) (c-mode) (c-set-style"K&R") (setq c-basic-offset8)) (setq auto-mode-alist (cons ‘("/usr/src/linux.*/.*\\.〖ch〗$" . linux-c-mode) auto-mode-alist)) 但是,假如你還不能讓emaces去自動處理文件的格式,不要緊張,你還有一樣?xùn)|西: "縮進" . GNU的縮進格式也很死板,這就是你為什么需要加上幾行命令選項.然而,這還不算太壞,因為GNU縮進格式的創(chuàng)造者也記得K&R的權(quán)威, (GNU沒有罪,他們僅僅是在這件事情上錯誤的引導(dǎo)了人們) ,你要做的就只有輸入選項"-kr -i8"(表示"K&R,縮進8個字符). "縮進"有很多功能,特別是當(dāng)它建議你重新格式你的代碼的時候,你應(yīng)該看看幫助.但要記住: "縮進"不是風(fēng)格很差的程序的萬靈丹. |
|