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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

4、ULE-2以及ASCAL語(yǔ)言不同的是,C程序員不使用諸如ThisVariableIsATemporaryCounter之類的命名方式.一個(gè)C語(yǔ)言的程序員會(huì)將之命名為tmp,這很容易書寫,且并不是那么難以去理解.然而,當(dāng)混合類型的名字不得不出現(xiàn)的時(shí)候,描述性名字對(duì)全局變量來(lái)說(shuō)是必要的了.調(diào)用一個(gè)名為foo全局的函數(shù)是很讓人惱火的.全局變量(只有你必須使用的時(shí)候才使用它) ,就象全局函數(shù)一樣,需要描述性的命名方式.假如你有一個(gè)函數(shù)用來(lái)計(jì)算活動(dòng)用戶的數(shù)量,你應(yīng)該這樣命名-count_active_users()-或另外的相近的形式,你不應(yīng)命名為cntusr().有一種稱為Hungarian命名方式,

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

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

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

8、經(jīng)被告之GUN emacs會(huì)自動(dòng)的幫你處理C的源代碼格式,而且你已經(jīng)看到它確實(shí)如此,但是,缺省的情況下,它的作用還是不盡如人意(實(shí)際上,他們比隨便敲出來(lái)的東西還要難看- ainfinite number of monkeys typing into GNU emacs would never make a good program)于是,你可以要么不要使用GUN emacs,要么讓它使用sanervalules.使用后者,你需要將如下的語(yǔ)句輸入到你的.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)這會(huì)定義一個(gè)M-x Linux-c-mode的命令.當(dāng)你hacking一個(gè)模塊的時(shí)候,如何你將-*- linux-c -*-輸入在最開始的兩行,這個(gè)模式會(huì)自動(dòng)起作用.而且,你也許想加入如下(setq auto-mode-alist (cons (/usr/src/linux.*/.*.ch$ . linux-c-mode) auto-mode-alist)到你的.emacs文件中,這樣的話,當(dāng)你在/usr/src/linux下編輯文件

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

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

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

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é)束的位置。但對(duì)于很簡(jiǎn)單的程序塊,也可以使用(3)方式。 3、 命名系統(tǒng)除了常用的規(guī)則,如#define 常量應(yīng)全部大寫,變量命名的基本規(guī)則等之外,還要養(yǎng)成一個(gè)良好的命名的習(xí)慣。不要使用漢語(yǔ)拼音命名,盡量使用英文單詞,常用的縮寫,下劃線,數(shù)字等,這樣更容易理解變量的意義。但是也要避免過(guò)長(zhǎng)的變量名和函數(shù)名。當(dāng)一個(gè)工程越做越大,命名可以越

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論