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