版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
淺談C++規(guī)范化編程規(guī)范化編程的意義※對(duì)于團(tuán)隊(duì)開發(fā)每個(gè)人都有自己的想法,每個(gè)人都有自己的代碼風(fēng)格,如果沒有一個(gè)約束大家的規(guī)范,整個(gè)項(xiàng)目的開發(fā)必然一團(tuán)糟。為了能夠使整個(gè)項(xiàng)目能夠正常地進(jìn)行,并且保證項(xiàng)目質(zhì)量,我們需要規(guī)范化的編程。
※對(duì)于小型項(xiàng)目
在座的同事,都能按照項(xiàng)目的需求,在項(xiàng)目交付日期前,完成軟件的開發(fā)工作。所以從技術(shù)上來說,各位都算得上是高手?!?xiàng)目的延續(xù)性、可讀性也要求進(jìn)行規(guī)范,便于后續(xù)的維護(hù)管理。規(guī)范化編程——排版規(guī)則1:程序塊要采用縮進(jìn)風(fēng)格編寫,縮進(jìn)
的空格數(shù)為4個(gè),不要使用Tab縮進(jìn),因?yàn)椴煌木庉嬈鲿?huì)有不同的解釋。說明:由開發(fā)工具自動(dòng)生成的代碼可以不一致。規(guī)則2:縮進(jìn)或者對(duì)齊只能使用空格鍵,不可使用TAB鍵。Tab配置:工具—>選項(xiàng)—>文本編輯器—>C/C++—>制表符規(guī)范化編程——排版規(guī)范化編程——排版規(guī)則3:相對(duì)獨(dú)立的塊之間、變量說明之后必須加空行。說明:以下情況應(yīng)該用空行隔開1)函數(shù)之間應(yīng)該用空行分開;2)變量聲明應(yīng)盡可能靠近第一次使用處,避免一次性聲明一組沒有馬上使用的變量;3)用空行將代碼按照邏輯片斷劃分;4)每個(gè)類聲明之后應(yīng)該加入空格同其他代碼分開。規(guī)范化編程——排版示例:規(guī)范化編程——排版規(guī)則4:較長的語句(>80字符)要分成多行書寫。說明,以下情況應(yīng)分多行書寫:1)長表達(dá)式要在低優(yōu)先級(jí)操作符處劃分新行,操作符放在新行之首,劃分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語句可讀。2)若函數(shù)或過程中的參數(shù)較長,則要進(jìn)行適當(dāng)?shù)膭澐帧?)循環(huán)、判斷等語句中若有較長的表達(dá)式或語句,則要進(jìn)行適應(yīng)的劃分,長表達(dá)式要在低優(yōu)先級(jí)操作符處劃分新行,操作符放在新行之首。規(guī)范化編程——排版規(guī)范化編程——排版規(guī)則5:不允許把多個(gè)短語句寫在一行,一行只寫一條語句。說明:一行代碼只做一件事情,如只定義一個(gè)變量,或只寫一條語句。這樣的代碼容易閱讀,并且方便于寫注釋。
規(guī)則6:if、for、do、while、case、switch、default等語句自占一行,且if、for、do、while等語句的執(zhí)行語句部分無論多少都要加括號(hào){}。規(guī)范化編程——排版建議7:代碼行之內(nèi)應(yīng)該留有適當(dāng)?shù)目崭裾f明:采用這種松散方式編寫代碼的目的是使代碼更加清晰。代碼行內(nèi)應(yīng)該適當(dāng)?shù)氖褂每崭?,具體如下:
1)關(guān)鍵字之后要留空格。象const、virtual、inline、case等關(guān)鍵字之后至少要留一個(gè)空格,否則無法辨析關(guān)鍵字。象if、for、while等關(guān)鍵字之后應(yīng)留一個(gè)空格再跟左括號(hào)‘(’,以突出關(guān)鍵字。
2)函數(shù)名之后不要留空格,緊跟左括號(hào)’(’,以與關(guān)鍵字區(qū)別。
3)‘(’向后緊跟,‘)’、‘,’、‘;’向前緊跟,緊跟處不留空格。
4)‘,’之后要留空格,如Function(x,y,z)。如果‘;’不是一行的結(jié)束符號(hào),其后也要留空格,如for(initialization;condition;update)。
5)值操作符、比較操作符、算術(shù)操作符、邏輯操作符、位域操作符,如“=”、“+=”
“>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”、“^”等二元操作符的前后應(yīng)當(dāng)加空格。
6)一元操作符如“!”、“~”、“++”、“--”、“&”(地址運(yùn)算符)等前后不加空格。
7)象“[]”、“.”、“->”這類操作符前后不加空格。8)對(duì)于表達(dá)式比較長的for語句和if語句,為了緊湊起見可以適當(dāng)?shù)厝サ粢恍┛崭?,如for(inti=0;i<10;++i)規(guī)范化編程——排版建議8:程序塊的分界符(如C/C++語言的大括號(hào)‘{’和‘}’)應(yīng)各獨(dú)占一行并且位于同一列,同時(shí)與引用它們的語句左對(duì)齊。在函數(shù)體的開始、類的定義、結(jié)構(gòu)的定義、枚舉的定義以及if、for、do、while、switch、case語句中的程序都要采用如上的縮進(jìn)方式規(guī)范化編程——注釋注釋的原則:
有助于對(duì)程序的閱讀理解,在該加的地方都要加,注釋不宜太多也不太少,一般情況下,源程序的有效注釋量應(yīng)該在20%以上。注釋語言必須準(zhǔn)確、易懂、簡(jiǎn)潔。注釋語言在同一項(xiàng)目中必須一致,不能中英混雜(對(duì)英文縮寫的英文注釋除外)。規(guī)范化編程——注釋規(guī)則1:說明性文件(如頭文件.h文件、.inc文件、.def文件、編譯說明文件.cfg等)頭部應(yīng)進(jìn)行注釋。注釋必須列出:版權(quán)說明、版本號(hào)、生成日期、作者、內(nèi)容、功能、與其它文件的關(guān)系、修改日志等,頭文件的注釋中還應(yīng)有函數(shù)功能簡(jiǎn)要說明。在實(shí)際工作中,每個(gè)類的函數(shù)不會(huì)太多,函數(shù)列表可以省略,只要寫清楚函數(shù)的注釋就行。規(guī)范化編程——注釋規(guī)則2:源文件頭部應(yīng)進(jìn)行注釋,列出:生成日期、作者、模塊目的/功能等。說明:同樣的,函數(shù)列表建議可以省略,但是函數(shù)的注釋要寫清楚。示例:下面這段源文件的頭注釋比較標(biāo)準(zhǔn),可以不局限于此格式,但上述信息要包含在內(nèi)。/*********************************************************Copyright(C),1988-1999,SynthesisCo.,Ltd.FileName:test.cppAuthor://編寫人Version://版本號(hào)Date://生成日期Description://模塊描述Version://版本信息FunctionList://主要函數(shù)及其功能1.-------History://歷史修改記錄<author><time><version><desc>David96/10/121.0buildthismoudle********************************************************/規(guī)范化編程——注釋規(guī)則3:函數(shù)頭部應(yīng)進(jìn)行注釋,列出:函數(shù)的目的/功能、輸入?yún)?shù)、輸出參數(shù)、返回值、調(diào)用關(guān)系(函數(shù)、表)等。示例:同樣的,建議普通函數(shù)可以不用注釋紅色部分。/**********************************************Function://函數(shù)名稱Description://函數(shù)功能、性能等的描述Calls://被本函數(shù)調(diào)用的函數(shù)清單CalledBy://調(diào)用本函數(shù)的函數(shù)清單TableAccessed://被訪問的表(此項(xiàng)僅對(duì)于牽扯到數(shù)據(jù)庫操作的程序)TableUpdated://被修改的表(此項(xiàng)僅對(duì)于牽扯到數(shù)據(jù)庫操作的程序)Input://輸入?yún)?shù)說明,包括每個(gè)參數(shù)的作用、取值說明及參數(shù)間關(guān)系。Output://對(duì)輸出參數(shù)的說明。Return://函數(shù)返回值的說明Others://其它說明**********************************************/規(guī)范化編程——注釋規(guī)則3:注釋應(yīng)該和代碼同時(shí)更新,不再有用的注釋要?jiǎng)h除。規(guī)則4:注釋的內(nèi)容要清楚、明了,不能有二義性.規(guī)則5:避免在注釋中使用非常用的縮寫或者術(shù)語。建議6:注釋的主要目的應(yīng)該是解釋為什么這么做,而不是正在做什么。建議7:避免非必要的注釋。ClassA*pA=newClassA();//創(chuàng)建新實(shí)例規(guī)范化編程——注釋規(guī)則8:注釋的版式說明:注釋也需要與代碼一樣整齊排版1)注釋應(yīng)與其描述的代碼相近,對(duì)代碼的注釋應(yīng)放在其上方或右方(對(duì)單條語句的注釋)相鄰位置,不可放在下面,如放于上方則需與其上面的代碼用空行隔開。2)注釋與所描述內(nèi)容進(jìn)行同樣的縮排。3)將注釋與其上面的代碼用空行隔開。4)變量、常量、宏的注釋應(yīng)放在其上方相鄰位置或右方。示例:如下例子不符合規(guī)范。規(guī)范化編程——注釋規(guī)范化編程——注釋規(guī)則9:對(duì)于所有有物理含義的變量、常量,如果其命名不是充分自注釋的,在聲明時(shí)都必須加以注釋,說明其物理含義。規(guī)則10:數(shù)據(jù)結(jié)構(gòu)聲明(包括數(shù)組、結(jié)構(gòu)、類、枚舉等),如果其命名不是充分自注釋的,必須加以注釋。對(duì)數(shù)據(jù)結(jié)構(gòu)的注釋應(yīng)放在其上方相鄰位置,不可放在下面;對(duì)結(jié)構(gòu)中的每個(gè)域的注釋可放在此域的右方。建議11:對(duì)重要變量的定義需編寫注釋,特別是全局變量,更應(yīng)有較詳細(xì)的注釋,包括對(duì)其功能、取值范圍、以及存取時(shí)注意事項(xiàng)等的說明。規(guī)范化編程——注釋規(guī)則12:分支語句(條件分支、循環(huán)語句等)需編寫注釋。說明:這些語句往往是程序?qū)崿F(xiàn)某一特定功能的關(guān)鍵,對(duì)于維護(hù)人員來說,良好的注釋幫助更好的理解程序,有時(shí)甚至優(yōu)于看設(shè)計(jì)文檔。規(guī)則13:對(duì)于switch語句下的case語句,如果因?yàn)樘厥馇闆r需要處理完一個(gè)case后進(jìn)入下一個(gè)case處理,必須在該case語句處理完、下一個(gè)case語句前加上明確的注釋。說明:這樣比較清楚程序編寫者的意圖,有效防止無故遺漏break語句。規(guī)范化編程——注釋規(guī)則14:避免在一行代碼或表達(dá)式的中間插入注釋。規(guī)則15::通過對(duì)函數(shù)或過程、變量、結(jié)構(gòu)等正確的命名以及合理地組織代碼的結(jié)構(gòu),使代碼成為自注釋的。說明:清晰準(zhǔn)確的函數(shù)、變量等的命名,可增加代碼可讀性,并減少不必要的注釋。規(guī)則16:在代碼的功能、意圖層次上進(jìn)行注釋,提供有用、額外的信息。說明:注釋的目的是解釋代碼的目的、功能和采用的方法,提供代碼以外的信息,幫助讀者理解代碼,防止沒必要的重復(fù)注釋信息。規(guī)則17:在程序塊的結(jié)束行右方加注釋標(biāo)記,以表明某程序塊的結(jié)束。說明:當(dāng)代碼段較長,特別是多重嵌套時(shí),這樣做可以使代碼更清晰,更便于閱讀。規(guī)則18:注釋格式應(yīng)統(tǒng)一,單獨(dú)的注釋使用“/*……*/”,代碼行中的注釋使用“//”。使用“//”時(shí),應(yīng)在“//”與注釋內(nèi)容之間增加一個(gè)空格。Somecode//
注釋
此處應(yīng)有空格
規(guī)范化編程——標(biāo)識(shí)符命名比較著名的命名規(guī)則當(dāng)推Microsoft公司的“匈牙利”法,該命名規(guī)則的主要思想是“在變量和函數(shù)名中加入前綴以增進(jìn)人們對(duì)程序的理解”。例如所有的字符變量均以ch為前綴,若是指針變量則追加前綴p。如果一個(gè)變量由ppch開頭,則表明它是指向字符指針的指針。“匈牙利”法最大的缺點(diǎn)是煩瑣,例如inti,j,k;floatx,y,z;倘若采用“匈牙利”命名規(guī)則,則應(yīng)當(dāng)寫成intiI,iJ,ik;//前綴i表示int類型floatfX,fY,fZ;//前綴f表示float類型據(jù)考察,沒有一種命名規(guī)則可以讓所有的程序員贊同,程序設(shè)計(jì)教科書一般都不指定命名規(guī)則。命名規(guī)則對(duì)軟件產(chǎn)品而言并不是“成敗悠關(guān)”的事。我們不要化太多精力試圖發(fā)明世界上最好的命名規(guī)則,而應(yīng)當(dāng)制定一種令大多數(shù)項(xiàng)目成員滿意的命名規(guī)則,并在項(xiàng)目中貫徹實(shí)施。但是毫無爭(zhēng)議的,“匈牙利”法還是被應(yīng)用最多的,建議使用。規(guī)范化編程——標(biāo)識(shí)符命名規(guī)則1:命名盡量使用英文單詞,力求簡(jiǎn)單清楚,避免使用引起誤解的詞匯和模糊的縮寫,使人產(chǎn)生誤解。較長的單詞可取單詞的頭幾個(gè)字母形成縮寫;如一些單詞有大家公認(rèn)的縮寫。規(guī)范化編程——標(biāo)識(shí)符命名規(guī)則2:命名規(guī)范必須與所使用的系統(tǒng)風(fēng)格保持一致,并在同一項(xiàng)目中統(tǒng)一。說明:1)如在UNIX系統(tǒng),可采用全小寫加下劃線的風(fēng)格或大小寫混排的方式,但不能使用大小寫與下劃線混排的方式。2)用作特殊標(biāo)識(shí)如標(biāo)識(shí)成員變量或全局變量的m_和g_,其后加上大小寫混排的方式是允許的。規(guī)范化編程——標(biāo)識(shí)符命名規(guī)則3:常量、宏和模板名采用全大寫的方式,每個(gè)單詞間用下劃線分隔。建議4:枚舉類型enum常量應(yīng)以大寫字母開頭或全部大寫。建議5:命名中若使用了特殊約定或縮寫,則要有注釋說明。說明:應(yīng)該在源文件的開始之處,對(duì)文件中所使用的縮寫或約定,特別是特殊的縮寫,進(jìn)行必要的注釋說明。規(guī)則6:自己特有的命名風(fēng)格,要自始至終保持一致,不可來回變化。說明:個(gè)人的命名風(fēng)格,在符合所在項(xiàng)目組或產(chǎn)品組的命名規(guī)則的前提下,才可使用。(即命名規(guī)則中沒有規(guī)定到的地方才可有個(gè)人命名風(fēng)格)。規(guī)則7:對(duì)于變量命名,禁止取單個(gè)字符(如i、j、k...),建議除了要有具體含義外,還能表明其變量類型、數(shù)據(jù)類型等,但i、j、k作局部循環(huán)變量是允許的。說明:變量,尤其是局部變量,如果用單個(gè)字符表示,很容易敲錯(cuò)(如i寫成j),而編譯時(shí)又檢查不出來,有可能為了這個(gè)小小的錯(cuò)誤而花費(fèi)大量的查錯(cuò)時(shí)間。規(guī)范化編程——可讀性規(guī)則1:注意運(yùn)算符的優(yōu)先級(jí),并用括號(hào)明確表達(dá)式的操作順序,避免使用默認(rèn)優(yōu)先級(jí)。規(guī)則2:避免使用“魔數(shù)”,用有意義的標(biāo)識(shí)來替代。涉及物理狀態(tài)或者含有物理意義的常量,不應(yīng)直接使用數(shù)字,必須用有意義的枚舉或宏來代替。規(guī)則3:源程序中關(guān)系較為緊密的代碼應(yīng)盡可能相鄰.說明:便于程序閱讀和查找。建議4:不要使用難懂的技巧性很高的語句,除非很有必要時(shí)。說明:高技巧語句不等于高效率的程序,實(shí)際上程序的效率關(guān)鍵在于算法。規(guī)范化編程——可讀性魔數(shù)(magicnumber),即在編寫程序時(shí)直接在程序中運(yùn)用數(shù)字,而不是采用定義宏或是const變量的方式.規(guī)范化編程——可讀性規(guī)范化編程——可讀性條件運(yùn)算符規(guī)范化編程——可讀性如下表達(dá)式,考慮不周就可能出問題,也較難理解。*stat_poi+++=1;*++stat_poi+=1;應(yīng)分別改為如下:*stat_poi+=1;stat_poi++;//此二語句相當(dāng)于“*stat_poi+++=1;”++stat_poi;*stat_poi+=1;//此二語句相當(dāng)于“*++stat_poi+=1;”規(guī)范化編程——其他關(guān)于變量和結(jié)構(gòu)、函數(shù)和過程的相關(guān)編程規(guī)范,詳見《神思公司軟件編程規(guī)范》文檔。在此,不再贅述。規(guī)范化編程——其他編程建議※建議1:使用const提高函數(shù)的健壯性。const是constant的縮寫,“恒定不變”的意思。被const修飾的東西都受到強(qiáng)制保護(hù),可以預(yù)防意外的變動(dòng),能提高程序的健壯性。所以很多C++程序設(shè)計(jì)書籍建議:“Useconstwheneveryouneed”1)用const修飾函數(shù)的參數(shù)(輸入?yún)?shù))2)用const修飾函數(shù)的返回值3)const成員函數(shù)規(guī)范化編程——其他編程建議※建議2:提高程序的效率。程序的時(shí)間效率是指運(yùn)行速度,空間效率是指程序占用內(nèi)存或者外存的狀況。全局效率是指站在整個(gè)系統(tǒng)的角度上考慮的效率,局部效率是指站在模塊或函數(shù)角度上考慮的效率規(guī)范化編程——其他編程建議關(guān)于提高程序效率的六條建議1)不要一味地追求程序的效率,應(yīng)當(dāng)在滿足正確性、可靠性、健壯性、可讀性等質(zhì)量因素的前提下,設(shè)法提高程序的效率。2)以提高程序的全局效率為主,提高局部效率為輔。3)在優(yōu)化程序的效率時(shí),應(yīng)當(dāng)先找出限制效率的“瓶頸”,不要在無關(guān)緊要之處優(yōu)化。4)先優(yōu)化數(shù)據(jù)結(jié)構(gòu)和算法,再優(yōu)化執(zhí)行代碼。5)有時(shí)候時(shí)間效率和空間效率可能對(duì)立,此時(shí)應(yīng)當(dāng)分析那個(gè)更重要,作出適當(dāng)?shù)恼壑?。例如多花費(fèi)一些內(nèi)存來提高性能。6)不要追求緊湊的代碼,因?yàn)榫o湊的代碼并不能產(chǎn)生高效的機(jī)器碼,返回會(huì)影響程序的清晰可讀性。規(guī)范化編程——其他編程建議※建議3:其他有益于程序編寫的建議1)當(dāng)心那些視覺上不易分辨的操作符發(fā)生書寫錯(cuò)誤。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年物流園區(qū)運(yùn)營管理承包合同模板3篇
- 社區(qū)勞動(dòng)保障工作總結(jié)范文三篇
- 甲醇課程設(shè)計(jì)
- 簡(jiǎn)單的vhdl課程設(shè)計(jì)
- 機(jī)電畢業(yè)課程設(shè)計(jì)書
- 物流園消防培訓(xùn)課程設(shè)計(jì)
- 簡(jiǎn)單網(wǎng)課程設(shè)計(jì)
- 輸變電工程施工合同(2020版)
- 紀(jì)念方法微課程設(shè)計(jì)
- 市場(chǎng)部門拓展新市場(chǎng)并提升品牌影響力
- 人力資源許可證制度(服務(wù)流程、服務(wù)協(xié)議、收費(fèi)標(biāo)準(zhǔn)、信息發(fā)布審查和投訴處理)
- 延期留用崗位協(xié)議書模板
- 借條的正規(guī)模板(2024版)
- 2024包鋼(集團(tuán))公司招聘941人高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 人教PEP版小學(xué)英語六年級(jí)上冊(cè)Unit1-6單元單元檢測(cè)試卷(含聽力材料)
- 銷售合同編號(hào)規(guī)則(2024版)
- 2024至2030年中國生活權(quán)益卡券行業(yè)發(fā)展監(jiān)測(cè)及投資戰(zhàn)略研究報(bào)告
- 大學(xué)美育-美育賞湖南智慧樹知到期末考試答案章節(jié)答案2024年湖南高速鐵路職業(yè)技術(shù)學(xué)院
- 數(shù)據(jù)結(jié)構(gòu)期末考試題及答案
- 2024-2025學(xué)年度第一學(xué)期小學(xué)一年級(jí)語文教學(xué)計(jì)劃及進(jìn)度表
- 中國腦卒中防治指導(dǎo)規(guī)范(2021 年版)
評(píng)論
0/150
提交評(píng)論