版權(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)常量 .102.類,常數(shù),結(jié)構(gòu),枚舉和類型名. 113.變量名,參數(shù)名,縮略語(yǔ) .114.函數(shù)名 .115.匈牙利命名法 .11四 .C/C+ 代碼格式化工具 .131.SourceFormatX .132.Astyle .13五 .參考文獻(xiàn) .13.一. 前言在商品
2、化軟件開發(fā)中, 非常重視程序編碼規(guī)范, 不同的公司或組織有不同規(guī)范, 比如:“ GNU Coding Standards”、“ 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è)求職與
3、工作。C+ 的程序書寫規(guī)范最初緣自 K&D 的 C Programming Language 一書以及 Unix 早期的源代碼,一般稱為“ K&D 的風(fēng)格”,最典型的特征是函數(shù)參數(shù)聲明、帶下劃線的標(biāo)識(shí)符和花括號(hào)的位置,早期的程序縮進(jìn)通常為8 個(gè)空格,如下面程序:int sample_function()int x, y;/* xy*/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
4、 兩大流派, Java 的風(fēng)格偏向于Unix/Linux 。本文主要是綜合網(wǎng)絡(luò)上發(fā)布的資料,根據(jù)程序開發(fā)的通行做法,約定了C+ 程序的書寫規(guī)范。.二. 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參見:文獻(xiàn) 1第 40 條2. 語(yǔ)句一條語(yǔ)句占一行或多行,避免一行寫多條語(yǔ)句,除非這些語(yǔ)句非常相關(guān)。參見:文獻(xiàn) 2 “ One Statem
5、ent Per Line”章節(jié)3. 程序注釋程序注釋包含段注釋和行注釋兩種,段注釋單獨(dú)一行或幾行,主要說(shuō)明下面一段程序完成什么功能,行注釋用于解釋某條語(yǔ)句的功能。注意注釋書寫的對(duì)齊。/void SampleFunction()/ 1 /1 /2/ 2.if ()/ 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”。參見
6、:文獻(xiàn)1第 38 條文獻(xiàn) 2 “ Indentation/Tabs/Space Policy ”章節(jié)文獻(xiàn) 4“ Spaces vs. Tabs”章節(jié)5. 程序塊程序塊的花括號(hào)位置有三種寫法,推薦采用第一或第二種格式/ C/C+while (!done)doSomething();done = moreToDo();/ C/C+while (!done) doSomething();done = moreToDo();/ GNU.精品文檔while (!done)doSomething();done = moreToDo();參見:文獻(xiàn)1第 72 條文獻(xiàn) 5 “ Formatting Your
7、Source Code ”章節(jié)6. 空行正如一篇文章中要有自然段一樣,在程序中要適當(dāng)使用空行來(lái)表示程序段落。在必要時(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, -si
8、nAngle);matrix.setElement(2, 2, cosAngle);multiply(matrix);在類聲明 class 中, public 、protected、private 節(jié)之間加上空行,除非這個(gè)類聲明的規(guī)模很小。參見:文獻(xiàn) 1 第 86、 87 條文獻(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 (
9、true)/ NOT: while(true).doSomething(a, b, c, d); / NOT: doSomething(a,b,c,d);for (i = 0; i 10; i+) / NOT: for(i=0;i10;i+)這幾點(diǎn)是所有的代碼書寫規(guī)范中都要求的,但也是程序員最容易忽視的地方。在運(yùn)算符前后加上空格,可以大大改善復(fù)雜表達(dá)式和復(fù)雜語(yǔ)句的可讀性。參見:文獻(xiàn)1第 84 條8. 圓括弧圓括弧的使用注意以下幾點(diǎn):(1) 不要在關(guān)鍵字后直接跟上圓括弧,中間必須有空格(2) 函數(shù)名后直接跟上圓括弧 (以示和關(guān)鍵字的區(qū)別, 但有些規(guī)范中要求和關(guān)鍵字一樣加上空格)(3) 函數(shù)參數(shù)名
10、中,括弧和參數(shù)之間沒(méi)有空格(有些規(guī)范中有空格,但多數(shù)沒(méi)有)(4) return 語(yǔ)句后不要用圓括弧(如果不是必須的話)if (condition).精品文檔while (condition)strcpy(s, s1);return 1;參見:文獻(xiàn) 2 “Parens () with Key Words and Functions Policy ”章節(jié)文獻(xiàn) 3 “Example 17: The left parenthesis always directly after the function name”章節(jié)文獻(xiàn) 4 “ Function Declarations and Definition
11、s ”章節(jié)9. 浮點(diǎn)常量浮點(diǎn)常量必須有小數(shù)點(diǎn)。double total = 0.0;/ NOT: double total = 0;double speed = 3.0e8; / NOT: double speed = 3e8;double sum;sum = (a + b) * 10.0;參見:文獻(xiàn) 1第 66 條10. 對(duì)齊適當(dāng)?shù)?、合理地使用?duì)齊可以使程序更易讀。DWORDmDword.DWORD*mpDwordchar*mpCharcharmCharmDword= 0;mpDword = NULL;mpChar= NULL;mChar= 0;ReturnType ClassName:Re
12、allyLongFunctionName(Type par_name1,Type par_name2,Type par_name3)DoSomething();參見:文獻(xiàn) 1第 88 條文獻(xiàn) 2 “Alignment of Declaration Blocks”章節(jié)文獻(xiàn) 4 “ Function Declarations and Definitions ”章節(jié)11. 類的聲明類的聲明如下格式:/ 1 public1class SomeClass : public BaseClasspublic:protected:private:.;/2VCpublic2class SomeClass : p
13、ublic BaseClasspublic:protected:private:;按照接口與實(shí)現(xiàn)分離的原則,一般不要把成員函數(shù)的實(shí)現(xiàn)放在class 中。按 public 、protected、 private 的次序聲明各成員。注意在派生類和基類之間的冒號(hào)兩邊加上空格。參見:文獻(xiàn) 1 第 36、 73 條文獻(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ì)中
14、流行將“ * ”緊挨在變量類型之后,這種書寫格式要求一行聲明一個(gè)變量,即int* p1;int* p2;int* p3;引用類型的“ & ”符號(hào)也類似。.精品文檔上述兩種書寫格式均可,但要注意在一個(gè)程序代碼里只遵循一種書寫風(fēng)格。參見:文獻(xiàn) 2 “ Pointer Variables ”章節(jié)文獻(xiàn) 3 “ Pointers and References”章節(jié)文獻(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)成,單詞的首字母大寫用于分隔單詞。如果該
15、標(biāo)識(shí)符的作用域比較大,則取名較長(zhǎng);如果單詞的作用域較小,寫取名較短。變量用名詞或詞組、函數(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í)符中大小寫字母混用,單詞之間用下劃線“ _”分隔。參見:文獻(xiàn) 1 “ Naming Conventions ”章節(jié)文獻(xiàn) 3 “ Assign Names”章節(jié)文獻(xiàn) 6文獻(xiàn) 7文獻(xiàn) 5 “ Naming Variables, Functions, and Files ”章
16、節(jié)1. 符號(hào)常量符號(hào)常量采用全大寫字母的方式,單詞和單詞之間用“_”分隔。#define MAX_PATH 256.精品文檔2. 類,常數(shù),結(jié)構(gòu),枚舉和類型名類、常數(shù)、結(jié)構(gòu)、枚舉和類型名使用“UpperCamelCase”,即第一個(gè)字母大寫。enum BackgroundColorNone,Red,Green,Blue;const int FixedWidth = 10;class BankAccount/ .;typedef list Portfolio;Visual C+ 的 MFC 類庫(kù)中, 類名的第一個(gè)字母以大寫“C”開始,如“CWindow ”、“CFile ”。3. 變量名,參數(shù)名
17、,縮略語(yǔ)變量名、參數(shù)名、縮略語(yǔ)使用“l(fā)owerCamelCase”。int fixedWidth = 10;void LoadXmlDocumnet(const char *docName); /注意縮略語(yǔ)XML 必須寫成Xml4. 函數(shù)名函數(shù)名有兩種不同的風(fēng)格:lowerCamelCase ,為 Unix 程序設(shè)計(jì)和Java 程序設(shè)計(jì)風(fēng)格。如loadXmlDocument()UpperCamelCase,為 Windows 程序設(shè)計(jì)風(fēng)格。如CreateWindow()5. 匈牙利命名法.精品文檔匈牙利命名法 (Hungarian notation )是變量名在上述取名規(guī)劃的基礎(chǔ)上,加上小寫字
18、母前綴用于表示數(shù)據(jù)類型,它的好處是在閱讀程序時(shí),看到一個(gè)變量名,不用去翻看前面的變量聲明類型,直接就可以知道該變量的類型。對(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ì)中,匈牙利命令法使用得較少。匈牙利命名法常用的前綴:m_類的數(shù)據(jù)成員,如m_nLengthg_全局變量,如g_szConnectionn 或 i整型變量,如nLengthc 或 ch
19、字符型變量,如cInputb 布爾型變量,如 bFoundl長(zhǎng)整型變量,如 lCountf單精度浮點(diǎn)型變量,如 fRadiusd雙精度浮點(diǎn)型變量,如 dRadiusu 無(wú)符號(hào)變量sz以 0結(jié)束的字符串,如 szNamep指針變量,可以和其它類型前綴聯(lián)合使用,如pszPathr引用變量,可以和其它類型前綴聯(lián)合使用,如rnStatus除此之外,還可以根據(jù)程序中不同的數(shù)據(jù)類型(包括自定義的數(shù)據(jù)類型),自行約定一些前綴,如:win表示窗口類型變量,如winResultstr表示 STL 的 string 類型變量,如 strMessagedw表示 Double Word 變量,如 dwFlagrect
20、表示矩形圖形變量,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)算符左右空格的添加,但不是縮進(jìn)和空格添加都正確。2.Astyleastyle 是基于命令行的代碼格式化工具,有多個(gè)操作系統(tǒng)版本,在Windows 系統(tǒng)中必須在命令窗口中使用。Astyle 命令選項(xiàng)格式符合GNU 的使用規(guī)范。Astyle 是開源軟件,安裝好以后,源程序放在astylesrc 目錄下,這些源程序書寫格式非常規(guī)范,也符合本文所推薦的格式,可以供程序書寫參考。Astyle 的執(zhí)行程序放在astylebin 目錄下,在命令行上輸入:astylebinastylea.cpp即可把 a.cpp 的格式進(jìn)行修正,修正后的代碼還是在a.cpp 中
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024馬腦山養(yǎng)殖戶合同
- 2024樓頂廣告牌安裝合同范本
- 房產(chǎn)交易資金托管服務(wù)合同
- 社區(qū)環(huán)境衛(wèi)生維護(hù)合同
- 授權(quán)經(jīng)營(yíng)合同范本
- 房屋建筑工程協(xié)議2024年
- 標(biāo)準(zhǔn)傷殘賠償協(xié)議書參考
- 2023年高考地理第一次模擬考試卷-(廣東B卷)(考試版)A4
- 【人教版系列】四年級(jí)數(shù)學(xué)下冊(cè)全冊(cè)專項(xiàng)測(cè)評(píng)(含答案)
- 關(guān)于離婚協(xié)議書的撰寫指南
- 生態(tài)文明學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 區(qū)病案質(zhì)控中心匯報(bào)
- 期中測(cè)試卷(1-4單元)(試題)2024-2025學(xué)年四年級(jí)上冊(cè)數(shù)學(xué)人教版
- 教育局職業(yè)院校教師培訓(xùn)實(shí)施方案
- 《萬(wàn)維網(wǎng)服務(wù)大揭秘》課件 2024-2025學(xué)年人教版新教材初中信息技術(shù)七年級(jí)全一冊(cè)
- 2024年新華社招聘應(yīng)屆畢業(yè)生及留學(xué)回國(guó)人員129人歷年高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 人教版(2024新版)七年級(jí)上冊(cè)英語(yǔ)Unit 5單元測(cè)試卷(含答案)
- (完整版)新概念英語(yǔ)第一冊(cè)單詞表(打印版)
- 美食行業(yè)外賣平臺(tái)配送效率提升方案
- 中國(guó)民用航空局信息中心招聘筆試題庫(kù)2024
- 芯片設(shè)計(jì)基礎(chǔ)知識(shí)題庫(kù)100道及答案(完整版)
評(píng)論
0/150
提交評(píng)論