程序書寫規(guī)范_第1頁(yè)
程序書寫規(guī)范_第2頁(yè)
程序書寫規(guī)范_第3頁(yè)
程序書寫規(guī)范_第4頁(yè)
程序書寫規(guī)范_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、C+程序書寫規(guī)范萬(wàn) 健2009/8/8目錄一.前言2二.C+程序書寫規(guī)范31.頭文件32.語(yǔ)句33.程序注釋34.縮進(jìn)45.程序塊46.空行57.空格68.圓括弧69.浮點(diǎn)常量710.對(duì)齊711.類的聲明812.指針和引用變量9三.標(biāo)識(shí)符命名規(guī)則101.符號(hào)常量112.類,常數(shù),結(jié)構(gòu),枚舉和類型名113.變量名,參數(shù)名,縮略語(yǔ)114.函數(shù)名115.匈牙利命名法12四.C/C+代碼格式化工具131.SourceFormatX132.Astyle13五.參考文獻(xiàn)14一. 前言在商品化軟件開發(fā)中,非常重視程序編碼規(guī)范,不同的公司或組織有不同規(guī)范,比如:“GNU Coding Standards”、“

2、Google C+ Style Guide”等。C+程序編碼規(guī)范(C+ Coding Standard)包含以下兩個(gè)含義:1. C+程序設(shè)計(jì)規(guī)范2. C+程序書寫規(guī)范程序設(shè)計(jì)規(guī)范牽涉程序開發(fā)過(guò)程中可靠性、可維護(hù)性、安全性的話題,而程序書寫規(guī)范是程序員約定的通行書寫格式。本文主要討論的是C+的程序書寫格式?,F(xiàn)在計(jì)算機(jī)專業(yè)教學(xué)過(guò)程中不重視程序書寫格式規(guī)范化教學(xué),一些教材中的程序書寫格式五花八門,造成學(xué)生在大學(xué)四年中缺乏規(guī)范化的編碼訓(xùn)練,直接影響學(xué)生畢業(yè)求職與工作。C+的程序書寫規(guī)范最初緣自K&D的C Programming Language一書以及Unix早期的源代碼,一般稱為“K&

3、;D的風(fēng)格”,最典型的特征是函數(shù)參數(shù)聲明、帶下劃線的標(biāo)識(shí)符和花括號(hào)的位置,早期的程序縮進(jìn)通常為8個(gè)空格,如下面程序:int sample_function()int x, y; /* x和y為函數(shù)的形式參數(shù) */ if () ; ;隨著C語(yǔ)言的發(fā)展,特別是C+的出現(xiàn),特別是微軟公司的Windows程序設(shè)計(jì)的影響,程序設(shè)計(jì)風(fēng)格發(fā)生的一系列的變化,出現(xiàn)的GNU、Linux、VC等規(guī)范,也出現(xiàn)標(biāo)識(shí)符的匈牙利命名法等規(guī)范,主要還是分為Unix/Linux和Windows兩大流派,Java的風(fēng)格偏向于Unix/Linux。本文主要是綜合網(wǎng)絡(luò)上發(fā)布的資料,根據(jù)程序開發(fā)的通行做法,約定了C+程序的書寫規(guī)范。

4、二. C+程序書寫規(guī)范1. 頭文件頭文件必須包含#ifndef#endif結(jié)構(gòu)。#ifndef COM_COMPANY_MODULE_CLASSNAME_H#define COM_COMPANY_MODULE_CLASSNAME_H :#endif / COM_COMPANY_MODULE_CLASSNAME_H參見:l 文獻(xiàn)1第40條2. 語(yǔ)句一條語(yǔ)句占一行或多行,避免一行寫多條語(yǔ)句,除非這些語(yǔ)句非常相關(guān)。參見:l 文獻(xiàn)2“One Statement Per Line”章節(jié)3. 程序注釋 程序注釋包含段注釋和行注釋兩種,段注釋單獨(dú)一行或幾行,主要說(shuō)明下面一段程序完成什么功能,行注釋用于解釋某

5、條語(yǔ)句的功能。注意注釋書寫的對(duì)齊。/ 該函數(shù)完成的功能void SampleFunction()/ 段注釋1 / 行注釋1 / 行注釋2/ 段注釋2if () / 段注釋3 / 4. 縮進(jìn)程序塊縮進(jìn)大小為2到4個(gè)空格之間,通常為4個(gè)空格。不用采用TAB控制符,而是采用空格符。如在Visual Studio2005中選擇“工具-選項(xiàng)-文本編輯器-C/C+-制表符-插入空格”、在DEV C+中的“Editor Options”取消“Use Tab Character”。參見:l 文獻(xiàn)1第38條l 文獻(xiàn)2“Indentation/Tabs/Space Policy”章節(jié)l 文獻(xiàn)4“Spaces vs

6、. Tabs”章節(jié)5. 程序塊程序塊的花括號(hào)位置有三種寫法,推薦采用第一或第二種格式/ 現(xiàn)代C/C+寫法while (!done) doSomething(); done = moreToDo();/ 傳統(tǒng)C/C+寫法while (!done) doSomething(); done = moreToDo();/ GNU寫法while (!done) doSomething(); done = moreToDo();參見:l 文獻(xiàn)1第72條l 文獻(xiàn)5“Formatting Your Source Code”章節(jié)6. 空行正如一篇文章中要有自然段一樣,在程序中要適當(dāng)使用空行來(lái)表示程序段落。在必要

7、時(shí),程序段落的開始要加上注釋,說(shuō)明該段程序的功能。在函數(shù)與函數(shù)之間,建設(shè)有兩行以上的空行。Matrix4x4 matrix = new Matrix4x4();double cosAngle = Math.cos(angle);double sinAngle = Math.sin(angle);matrix.setElement(1, 1, cosAngle);matrix.setElement(1, 2, sinAngle);matrix.setElement(2, 1, -sinAngle);matrix.setElement(2, 2, cosAngle);multiply(matrix

8、);在類聲明class中,public、protected、private節(jié)之間加上空行,除非這個(gè)類聲明的規(guī)模很小。參見:l 文獻(xiàn)1第86、87條l 文獻(xiàn)4“Class Format”章節(jié)7. 空格空格的使用包含以下幾種情況:(1) 雙目運(yùn)算符前后加上空格,單目運(yùn)算符前后不要加空格(2) C+保留字后必須加上空格(3) 逗號(hào)后面必須加上空格(4) for語(yǔ)句中的分號(hào)后加空格a = (b + c) * d; / NOT: a=(b+c)*dwhile (true) / NOT: while(true) .doSomething(a, b, c, d); / NOT: doSomething(a,

9、b,c,d);for (i = 0; i < 10; i+) / NOT: for(i=0;i<10;i+)這幾點(diǎn)是所有的代碼書寫規(guī)范中都要求的,但也是程序員最容易忽視的地方。在運(yùn)算符前后加上空格,可以大大改善復(fù)雜表達(dá)式和復(fù)雜語(yǔ)句的可讀性。參見:l 文獻(xiàn)1第84條8. 圓括弧圓括弧的使用注意以下幾點(diǎn):(1) 不要在關(guān)鍵字后直接跟上圓括弧,中間必須有空格(2) 函數(shù)名后直接跟上圓括?。ㄒ允竞完P(guān)鍵字的區(qū)別,但有些規(guī)范中要求和關(guān)鍵字一樣加上空格)(3) 函數(shù)參數(shù)名中,括弧和參數(shù)之間沒(méi)有空格(有些規(guī)范中有空格,但多數(shù)沒(méi)有)(4) return語(yǔ)句后不要用圓括弧(如果不是必須的話)if (c

10、ondition)while (condition)strcpy(s, s1);return 1;參見:l 文獻(xiàn)2“Parens () with Key Words and Functions Policy”章節(jié)l 文獻(xiàn)3“Example 17: The left parenthesis always directly after the function name”章節(jié)l 文獻(xiàn)4“Function Declarations and Definitions”章節(jié)9. 浮點(diǎn)常量浮點(diǎn)常量必須有小數(shù)點(diǎn)。double total = 0.0; / NOT: double total = 0;doubl

11、e speed = 3.0e8; / NOT: double speed = 3e8;double sum;sum = (a + b) * 10.0;參見:l 文獻(xiàn)1第66條10. 對(duì)齊適當(dāng)?shù)?、合理地使用?duì)齊可以使程序更易讀。 DWORD mDword DWORD* mpDword char* mpChar char mChar mDword = 0; mpDword = NULL; mpChar = NULL; mChar = 0;ReturnType ClassName:ReallyLongFunctionName(Type par_name1, Type par_name2, Type

12、par_name3) DoSomething();參見:l 文獻(xiàn)1第88條l 文獻(xiàn)2“Alignment of Declaration Blocks”章節(jié)l 文獻(xiàn)4“Function Declarations and Definitions”章節(jié)11. 類的聲明類的聲明如下格式:/ 格式1,public等關(guān)鍵字縮進(jìn)。文獻(xiàn)1的格式class SomeClass : public BaseClasspublic: protected: private: ;/ 格式2,VC通行格式,public等關(guān)鍵字不縮進(jìn)。文獻(xiàn)2的格式,建議使用這種格式class SomeClass : public BaseC

13、lasspublic: protected: private: ;按照接口與實(shí)現(xiàn)分離的原則,一般不要把成員函數(shù)的實(shí)現(xiàn)放在class中。按public、protected、private的次序聲明各成員。注意在派生類和基類之間的冒號(hào)兩邊加上空格。參見:l 文獻(xiàn)1第36、73條l 文獻(xiàn)2“Class Layout”章節(jié)12. 指針和引用變量傳統(tǒng)的C書寫風(fēng)格,指針變量聲明時(shí)“*”符號(hào)是緊挨在變量名之前,如int *p1, *p2, *p3;上述書寫方法是C語(yǔ)言設(shè)計(jì)的缺陷,因?yàn)樽兞款愋蛻?yīng)是“int*”或不是“int”,近年來(lái)C/C+程序設(shè)計(jì)中流行將“*”緊挨在變量類型之后,這種書寫格式要求一行聲明一個(gè)

14、變量,即int* p1;int* p2;int* p3;引用類型的“&”符號(hào)也類似。上述兩種書寫格式均可,但要注意在一個(gè)程序代碼里只遵循一種書寫風(fēng)格。參見:l 文獻(xiàn)2“Pointer Variables”章節(jié)l 文獻(xiàn)3“Pointers and References”章節(jié)l 文獻(xiàn)5“Pointer and Reference Expressions”章節(jié)三. 標(biāo)識(shí)符命名規(guī)則標(biāo)識(shí)符的命名用英文,避免使用其它語(yǔ)言或漢語(yǔ)拼音,取名應(yīng)能表示實(shí)際意義。標(biāo)識(shí)符一般由一個(gè)或幾個(gè)單詞構(gòu)成,單詞的首字母大寫用于分隔單詞。如果該標(biāo)識(shí)符的作用域比較大,則取名較長(zhǎng);如果單詞的作用域較小,寫取名較短。變量用名詞

15、或詞組、函數(shù)名用動(dòng)詞或動(dòng)詞短語(yǔ)。int numStudents; / number of students的縮寫void CreateWindow(); / Create Window的縮寫在GNU的編程規(guī)范中,依然延續(xù)早期的K&D風(fēng)格,不主張標(biāo)識(shí)符中大小寫字母混用,單詞之間用下劃線“_”分隔。參見:l 文獻(xiàn)1“Naming Conventions”章節(jié)l 文獻(xiàn)3“Assign Names”章節(jié)l 文獻(xiàn)6l 文獻(xiàn)7l 文獻(xiàn)5“Naming Variables, Functions, and Files”章節(jié)1. 符號(hào)常量符號(hào)常量采用全大寫字母的方式,單詞和單詞之間用“_”分隔。#def

16、ine MAX_PATH 2562. 類,常數(shù),結(jié)構(gòu),枚舉和類型名類、常數(shù)、結(jié)構(gòu)、枚舉和類型名使用“UpperCamelCase”,即第一個(gè)字母大寫。enum BackgroundColor None,Red,Green,Blue;const int FixedWidth = 10;class BankAccount / .;typedef list<BankAccount> Portfolio;Visual C+的MFC類庫(kù)中,類名的第一個(gè)字母以大寫“C”開始,如“CWindow”、“CFile”。3. 變量名,參數(shù)名,縮略語(yǔ)變量名、參數(shù)名、縮略語(yǔ)使用“l(fā)owerCamelCas

17、e”。int fixedWidth = 10; void LoadXmlDocumnet(const char *docName); / 注意縮略語(yǔ)XML必須寫成Xml4. 函數(shù)名函數(shù)名有兩種不同的風(fēng)格:l lowerCamelCase,為Unix程序設(shè)計(jì)和Java程序設(shè)計(jì)風(fēng)格。如loadXmlDocument()l UpperCamelCase,為Windows程序設(shè)計(jì)風(fēng)格。如CreateWindow()5. 匈牙利命名法匈牙利命名法(Hungarian notation)是變量名在上述取名規(guī)劃的基礎(chǔ)上,加上小寫字母前綴用于表示數(shù)據(jù)類型,它的好處是在閱讀程序時(shí),看到一個(gè)變量名,不用去翻看前面

18、的變量聲明類型,直接就可以知道該變量的類型。對(duì)匈牙利命名法有不同的看法,很多觀點(diǎn)認(rèn)為此種命名法過(guò)于復(fù)雜,而且現(xiàn)代的開發(fā)工具在查看程序時(shí),只要光標(biāo)移動(dòng)某個(gè)變量,可以自動(dòng)顯示這個(gè)變量的聲量,匈牙利命名法是多余的。在Windows程序設(shè)計(jì)里,廣泛使用匈牙利命名法(如VC、VB、C+ Builder);在Unix和Java程序設(shè)計(jì)中,匈牙利命令法使用得較少。匈牙利命名法常用的前綴:l m_類的數(shù)據(jù)成員,如m_nLengthl g_全局變量,如g_szConnectionl n或i整型變量,如nLengthl c或ch字符型變量,如cInputl b布爾型變量,如bFoundl l長(zhǎng)整型變量,如lCou

19、ntl f單精度浮點(diǎn)型變量,如fRadiusl d雙精度浮點(diǎn)型變量,如dRadiusl u無(wú)符號(hào)變量l sz以0結(jié)束的字符串,如szNamel p指針變量,可以和其它類型前綴聯(lián)合使用,如pszPathl r引用變量,可以和其它類型前綴聯(lián)合使用,如rnStatus除此之外,還可以根據(jù)程序中不同的數(shù)據(jù)類型(包括自定義的數(shù)據(jù)類型),自行約定一些前綴,如:l win表示窗口類型變量,如winResultl str表示STL的string類型變量,如strMessagel dw表示Double Word變量,如dwFlagl rect表示矩形圖形變量,rectRegion四. C/C+代碼格式化工具SourceFormatX和astyle是兩個(gè)較好的C/C+代碼格式化工具,它們可以把現(xiàn)有的程序代碼按一定的規(guī)范進(jìn)行調(diào)整,使得風(fēng)格更統(tǒng)一。1. SourceFormatXSourceFormatX是國(guó)產(chǎn)的基于Windows的代碼格式化工具,有較強(qiáng)的設(shè)定功能。能較好地處理縮進(jìn)、運(yùn)算符左右空格的添加,

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論