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

下載本文檔

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

文檔簡介

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

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

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

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

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

6、. Tabs”章節(jié)5. 程序塊程序塊的花括號位置有三種寫法,推薦采用第一或第二種格式/ 現(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 文獻1第72條l 文獻5“Formatting Your Source Code”章節(jié)6. 空行正如一篇文章中要有自然段一樣,在程序中要適當使用空行來表示程序段落。在必要

7、時,程序段落的開始要加上注釋,說明該段程序的功能。在函數(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é)之間加上空行,除非這個類聲明的規(guī)模很小。參見:l 文獻1第86、87條l 文獻4“Class Format”章節(jié)7. 空格空格的使用包含以下幾種情況:(1) 雙目運算符前后加上空格,單目運算符前后不要加空格(2) C+保留字后必須加上空格(3) 逗號后面必須加上空格(4) for語句中的分號后加空格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+)這幾點是所有的代碼書寫規(guī)范中都要求的,但也是程序員最容易忽視的地方。在運算符前后加上空格,可以大大改善復雜表達式和復雜語句的可讀性。參見:l 文獻1第84條8. 圓括弧圓括弧的使用注意以下幾點:(1) 不要在關鍵字后直接跟上圓括弧,中間必須有空格(2) 函數(shù)名后直接跟上圓括?。ㄒ允竞完P鍵字的區(qū)別,但有些規(guī)范中要求和關鍵字一樣加上空格)(3) 函數(shù)參數(shù)名中,括弧和參數(shù)之間沒有空格(有些規(guī)范中有空格,但多數(shù)沒有)(4) return語句后不要用圓括?。ㄈ绻皇潜仨毜脑挘﹊f (c

10、ondition)while (condition)strcpy(s, s1);return 1;參見:l 文獻2“Parens () with Key Words and Functions Policy”章節(jié)l 文獻3“Example 17: The left parenthesis always directly after the function name”章節(jié)l 文獻4“Function Declarations and Definitions”章節(jié)9. 浮點常量浮點常量必須有小數(shù)點。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 文獻1第66條10. 對齊適當?shù)?、合理地使用對齊可以使程序更易讀。 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 文獻1第88條l 文獻2“Alignment of Declaration Blocks”章節(jié)l 文獻4“Function Declarations and Definitions”章節(jié)11. 類的聲明類的聲明如下格式:/ 格式1,public等關鍵字縮進。文獻1的格式class SomeClass : public BaseClasspublic: protected: private: ;/ 格式2,VC通行格式,public等關鍵字不縮進。文獻2的格式,建議使用這種格式class SomeClass : public BaseC

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

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

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

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

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

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

19、ntl f單精度浮點型變量,如fRadiusl d雙精度浮點型變量,如dRadiusl u無符號變量l sz以0結束的字符串,如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是兩個較好的C/C+代碼格式化工具,它們可以把現(xiàn)有的程序代碼按一定的規(guī)范進行調(diào)整,使得風格更統(tǒng)一。1. SourceFormatXSourceFormatX是國產(chǎn)的基于Windows的代碼格式化工具,有較強的設定功能。能較好地處理縮進、運算符左右空格的添加,

溫馨提示

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

評論

0/150

提交評論