C語言編程風(fēng)格_第1頁
C語言編程風(fēng)格_第2頁
C語言編程風(fēng)格_第3頁
C語言編程風(fēng)格_第4頁
C語言編程風(fēng)格_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、C語言編程風(fēng)格縮進(jìn)格式Tab是8個字符,于是縮進(jìn)也是8個字符.有很多怪異的風(fēng)格,他們將縮進(jìn)格式定義為4個字符(設(shè)置為2個字符!)的深度,這就象試圖將PI定義為3一樣讓人難以接受. 理由是:縮進(jìn)的大小是為了清楚的定義一個塊的開始和結(jié)束.特別是當(dāng)你已經(jīng)在計算機(jī)前面呆了20多個小時了以后,你會發(fā)現(xiàn)一個大的縮進(jìn)格式使得你對程序的理解更容易.現(xiàn)在,有一些人說,使用8個字符的縮進(jìn)使得代碼離右邊很近,在80個字符寬度的終端屏幕上看程序很難受.回答是,但你的程序有3個以上的縮進(jìn)的時候,你就應(yīng)該修改你的程序.總之,8個字符的縮進(jìn)使得程序易讀,還有一個附加的好處,就是它能在你將程序變得嵌套層數(shù)太多的時候給你警告.

2、這個時候,你應(yīng)該修改你的程序.:大符號的位置另外一個C程序編程風(fēng)格的問題是對大括號的處理.同縮進(jìn)大小不同,幾乎沒有什么理由去選擇一種而不選擇另外一種風(fēng)格,但有一種推薦的風(fēng)格,它是Kernighan和Ritchie的經(jīng)典的那本書帶來的,它將開始的大括號放在一行的最后,而將結(jié)束大括號放在一行的第一位,如下所示:if (x is true) we do y 然而,還有一種特殊的情況:命名函數(shù):開始的括號是放在下一行的第一位,如下:int function(int x) body of function 所有非正統(tǒng)的人會非難這種不一致性,但是,所有思維正常的人明白: (第一) K&R是_對_的,(第二

3、)如果K&R不對,請參見第一條. (:-).另外,函數(shù)也是特殊的,不一定非得一致.需要注意的是結(jié)束的括號在它所占的那一行是空的,_除了_它跟隨著同一條語句的繼續(xù)符號.如while在do-while循環(huán)中,或者else在if語句中.如下:do body of do-loop while (condition);以及if (x = y) . else if (x y) . else . 理由: K&R.另外,注意到這種大括號的放置方法減小了空行的數(shù)量,但卻沒有減少可讀性.于是,在屏幕大小受到限制的時候,你就可以有更多的空行來寫些注釋了.命名系統(tǒng)C是一種簡潔的語言,那么,命名也應(yīng)該是簡潔的.同MOD

4、ULE-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命名方式,

5、它將函數(shù)的類型編碼寫入變量名中,這種方式是腦子有毛病的一種表現(xiàn)-編譯器知道這個類型而且會去檢查它,而這樣只會迷惑程序員. -知道為什么Micro$oft為什么會生產(chǎn)這么多臭蟲程序了把!.局部變量的命名應(yīng)該短小精悍.假如你有一個隨機(jī)的整數(shù)循環(huán)計數(shù)器,它有可能有i,如果沒有任何可能使得它能被誤解的話,將其寫作loop_counter是效率低下的.同樣的,tmp可以是任何臨時數(shù)值的函數(shù)變量.如果你害怕混淆你的局部變量的名字,還有另外一個問題,就是稱function-growth-hormone-imbalancesyndrome.:函數(shù)函數(shù)應(yīng)該短小而迷人,而且它只作一件事情.它應(yīng)只覆蓋一到兩個屏幕(

6、80*24一屏),并且只作一件事情,而且將它做好.(這不就是UNIX的風(fēng)格嗎,譯者注).一個函數(shù)的最大長度和函數(shù)的復(fù)雜程度以及縮進(jìn)大小成反比.于是,如果你已經(jīng)寫了簡單但長度較長的的函數(shù),而且你已經(jīng)對不同的情況做了很多很小的事情,寫一個更長一點(diǎn)的函數(shù)也是無所謂的.然而,假如你要寫一個很復(fù)雜的函數(shù),而且你已經(jīng)估計到假如一般人讀這個函數(shù),他可能都不知道這個函數(shù)在說些什么,這個時候,使用具有描述性名字的有幫助的函數(shù).另外一個需要考慮的是局部變量的數(shù)量.他們不應(yīng)該超過5-10個,否則你有可能會出錯.重新考慮這個函數(shù),將他們分割成更小的函數(shù).人的大腦通常可以很容易的記住7件不同的事情,超過這個數(shù)量會引起混

7、亂.你知道你很聰明,但是你可能仍想去明白2周以前的做的事情.注釋注釋是一件很好的事情,但是過多的注釋也是危險的,不要試圖區(qū)解釋你的代碼是注釋如何如何的好:你應(yīng)該將代碼寫得更好,而不是花費(fèi)大量的時間去解釋那些糟糕的代碼.通常情況下,你的注釋是說明你的代碼做些什么,而不是怎么做的.而且,要試圖避免將注釋插在一個函數(shù)體里:假如這個函數(shù)確實(shí)很復(fù)雜,你需要在其中有部分的注釋,你應(yīng)該回到第四章看看.你可以寫些簡短的注釋來注明或警告那些你認(rèn)為特別聰明(或極其丑陋)的部分,但是你必須要避免過多.取而代之的是,將注釋寫在函數(shù)前,告訴別人它做些什么事情,和可能為什么要這樣做.你已經(jīng)深陷其中了.不要著急.你有可能已

8、經(jīng)被告之GUN emacs會自動的幫你處理C的源代碼格式,而且你已經(jīng)看到它確實(shí)如此,但是,缺省的情況下,它的作用還是不盡如人意(實(shí)際上,他們比隨便敲出來的東西還要難看- ainfinite number of monkeys typing into GNU emacs would never make a good program)于是,你可以要么不要使用GUN emacs,要么讓它使用sanervalules.使用后者,你需要將如下的語句輸入到你的.emacs文件中.(defun linux-c-mode() C mode with adjusted defaults for use wit

9、h the Linux kernel.(interactive) (c-mode) (c-set-styleK&R) (setq c-basic-offset8)這會定義一個M-x Linux-c-mode的命令.當(dāng)你hacking一個模塊的時候,如何你將-*- linux-c -*-輸入在最開始的兩行,這個模式會自動起作用.而且,你也許想加入如下(setq auto-mode-alist (cons (/usr/src/linux.*/.*.ch$ . linux-c-mode) auto-mode-alist)到你的.emacs文件中,這樣的話,當(dāng)你在/usr/src/linux下編輯文件

10、的時候,它會自動切換到linux-c-mode .但是,假如你還不能讓emaces去自動處理文件的格式,不要緊張,你還有一樣?xùn)|西: 縮進(jìn) GNU的縮進(jìn)格式也很死板,這就是你為什么需要加上幾行命令選項(xiàng).然而,這還不算太壞,因?yàn)镚NU縮進(jìn)格式的創(chuàng)造者也記得K&R的權(quán)威, (GNU沒有罪,他們僅僅是在這件事情上錯誤的引導(dǎo)了人們) ,你要做的就只有輸入選項(xiàng)-kr -i8(表示K&R,縮進(jìn)8個字符).縮進(jìn)有很多功能,特別是當(dāng)它建議你重新格式你的代碼的時候,你應(yīng)該看看幫助.但要記住: 縮進(jìn)不是風(fēng)格很差的程序的萬靈丹.C語言編寫風(fēng)格 當(dāng)開發(fā)人員把C語言程序?qū)懙脑絹碓介L的時候,他們發(fā)現(xiàn)維護(hù)這些程序需要花更多的

11、功夫去讀以前所編寫的程序。保持一種良好的編碼風(fēng)格,對于一個開發(fā)團(tuán)隊(duì)或者自主開發(fā)者都是一件好事情。在這里要介紹的編程風(fēng)格就是為了讓初學(xué)者了解C語言的一些編寫風(fēng)格,使自己編寫的程序,可讀性,移植性,可維護(hù)性等更好,這是學(xué)習(xí)C語言必須學(xué)習(xí)的一種技能。這就象我們寫文章一樣,段落縮進(jìn)兩個文字這樣的風(fēng)格. 1、 縮進(jìn)對于函數(shù),選擇,循環(huán)控制,在進(jìn)入下級的程序段時,為了使結(jié)構(gòu)清晰,一般將下級的程序段向后縮進(jìn)一段位置??s進(jìn)的大小是為了清楚的定義一個塊的開始和結(jié)束,特別是當(dāng)你已經(jīng)編寫了很長的代碼時,你會發(fā)現(xiàn)一個大的縮進(jìn)格式使得你對程序的理解更容易,因?yàn)槌绦蚋袑哟胃?,可以最快的找到需要查看的程序塊。建議使用一個

12、TAB位置(8個字節(jié))進(jìn)行縮進(jìn),有些代碼編輯工具顯示一個TAB位置為4個字節(jié),這些都能使程序更清晰。現(xiàn)在,有一些人說,使用8個字符的縮進(jìn)使得代碼離右邊很近,在80個字符寬度的終端屏幕上看程序很難受?;卮鹗牵愕某绦蛴?個以上的縮進(jìn)的時候,你就應(yīng)該修改你的程序。總之,8個字符的縮進(jìn)使得程序易讀,還有一個附加的好處,就是它能在你將程序變得嵌套層數(shù)太多的時候給你警告。這個時候,你應(yīng)該修改你的程序,太多的嵌套對于程序執(zhí)行的效率和易讀性都是致命的殺手,可以考慮使用函數(shù)或者改變程序結(jié)構(gòu)。int fother()程序塊if(.)程序塊else程序塊 for(.)程序塊 2、 大括號的位置 一般情況下,有下

13、列幾種書寫方式:(1)if(xy)t=x; x=y; y=t;(2)Kernighan和Ritchie的經(jīng)典方式if(xy)t=x; x=y; y=t;(3)if(xy) t=x; x=y; y=t;推薦使用(1)方式,很明顯,這種方式能更清楚的看到程序塊的開始和結(jié)束的位置。但對于很簡單的程序塊,也可以使用(3)方式。 3、 命名系統(tǒng)除了常用的規(guī)則,如#define 常量應(yīng)全部大寫,變量命名的基本規(guī)則等之外,還要養(yǎng)成一個良好的命名的習(xí)慣。不要使用漢語拼音命名,盡量使用英文單詞,常用的縮寫,下劃線,數(shù)字等,這樣更容易理解變量的意義。但是也要避免過長的變量名和函數(shù)名。當(dāng)一個工程越做越大,命名可以越

14、來越難,因?yàn)橹孛F(xiàn)象會時有發(fā)生?,F(xiàn)在比較流行的命名規(guī)則如匈牙利命名法很好的解決了這個問題。匈牙利命名法通過在變量名前面加上相應(yīng)的小寫字母的符號標(biāo)識作為前綴,標(biāo)識出變量的作用域,類型等。這些符號可以多個同時使用,順序是先m_(成員變量),再指針,再簡單數(shù)據(jù)類型,再其他。例如:m_lpszStr, 表示指向一個以0字符結(jié)尾的字符串的長指針成員變量??赡苡行╅_發(fā)人員認(rèn)為匈牙利命名法有些冗長,但對于開發(fā)過程中,這種命名法則可以比較系統(tǒng)的,徹底的解決命名問題。但對于比較小的程序,也可以使用簡單的命名方式。 4、函數(shù)函數(shù)應(yīng)該短小而迷人,而且它只作一件事情。它應(yīng)只覆蓋一到兩個屏幕,并且只作一件事情,而且將它

15、做好。一個函數(shù)的最大長度和函數(shù)的復(fù)雜程度以及縮進(jìn)大小成反比。于是,如果你已經(jīng)寫了簡單但長度較長的的函數(shù),而且你已經(jīng)對不同的情況做了很多很小的事情,寫一個更長一點(diǎn)的函數(shù)也是無所謂的。然而,假如你要寫一個很復(fù)雜的函數(shù),而且你已經(jīng)估計到假如一般人讀這個函數(shù),他可能都不知道這個函數(shù)在說些什么,這個時候,使用具有描述性名字的有幫助的函數(shù)。另外一個需要考慮的是局部變量的數(shù)量。他們不應(yīng)該超過5-10個,否則你有可能會出錯。重新考慮這個函數(shù),將他們分割成更小的函數(shù)。人的大腦通??梢院苋菀椎挠涀?件不同的事情,超過這個數(shù)量會引起混亂。你知道你很聰明,但是你可能仍想去明白2周以前的做的事情。 5、 注釋注釋一般采取的兩種方式:對一個程序塊注釋和對一行程序注釋。/*比較x,y大小*/if(xy)t=x; x=y; y=t; /*交換x,y*/注釋是一件很好的事情,但是過多的注釋也是危險的,不要試圖區(qū)解釋你的代碼是注釋如何如何的好。你應(yīng)該將代碼寫得更好,而不是花費(fèi)大量的時間去解釋那些糟糕的代碼。通常情況下,你的注釋是說明你的代碼做些什么,而不是怎么做的。而且,要試圖避免將注釋插在一個函數(shù)體里。假如這個函數(shù)確實(shí)很復(fù)雜,你需要在其中有部分的注釋,最好還是把復(fù)雜的函數(shù)拆分成幾個簡單的函數(shù)。也可以將注釋寫在函數(shù)前,告訴別人它做些什么事情,和可能為什么要這樣做。 6、 空格與空行不要讓自己的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論