開發(fā)部C與C編碼規(guī)范_第1頁(yè)
開發(fā)部C與C編碼規(guī)范_第2頁(yè)
開發(fā)部C與C編碼規(guī)范_第3頁(yè)
開發(fā)部C與C編碼規(guī)范_第4頁(yè)
開發(fā)部C與C編碼規(guī)范_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、本文格式為Word版,下載可任意編輯 開發(fā)部,C與C編碼規(guī)范 開發(fā)部 C C 與 與 C+ 編碼規(guī)范 擬制: 日期: 審核: 日期: 批準(zhǔn): 日期: 文檔編號(hào): 創(chuàng)立日期: 結(jié)果修改日期: 版 本 號(hào):1.0.0 電子版文件名: 文檔修改記錄 修改日期 修改人 修改說明 版本號(hào) 修改頁(yè) 目 目 錄 錄 1. 概述 5 1.1. 引言 5 1.2. 考前須知 5 2. 命名規(guī)范 6 2.1. namespace 6 2.2. class(類) 6 2.3. Structure 6 2.4. 變量 7 2.4.1. 構(gòu)成方式 7 2.4.2. 變量作用域 7 2.4.3. 變量類型 7 2.5.

2、常數(shù) 8 2.6. 函數(shù) 8 2.7. 全局標(biāo)識(shí)符 9 3. 源文件樣式 10 3.1. 文件名后綴 10 3.2. 典型式樣 10 3.2.1. 版權(quán)信息 11 3.2.2. using/include 12 3.2.3. Class 12 3.2.4. Class 成員變量 13 3.2.5. 構(gòu)造函數(shù) 13 3.2.6. 類成員函數(shù) 13 4. 語(yǔ)句 14 4.1. 簡(jiǎn)單語(yǔ)句 14 4.2. 復(fù)合語(yǔ)句(代碼塊) 14 4.3. 返回語(yǔ)句 15 4.4. if,if-else,if else-if else 語(yǔ)句 15 4.5. for 語(yǔ)句 16 4.6. while 語(yǔ)句 16 4.7

3、. do-while 語(yǔ)句 16 4.8. switch 語(yǔ)句 17 4.9. try-catch 語(yǔ)句 17 4.10. 操作符重載 錯(cuò)誤! 未定義書簽。 4.10.1. 賦值操作符(=) 錯(cuò)誤! 未定義書簽。 5. 解釋 19 5.1. 代碼修改 19 5.2. 函數(shù)解釋 19 5.3. 行解釋 20 5.4. 代碼段解釋 20 6. 代碼編寫格式 21 6.1. 代碼樣式 21 6.2. 縮進(jìn) 21 6.3. 頁(yè)寬 21 6.4. 對(duì) 21 6.5. 括號(hào) 22 7. 目錄結(jié)構(gòu) 23 7.1. 一級(jí)目錄 23 7.2. dev 目錄 24 7.3. etc 目錄 24 8. c+程序約定

4、 25 8.1. 編譯(unix/linux) 25 8.2. 異常 25 8.3. 操作符重載 25 8.4. 封裝 26 8.5. 內(nèi)存 26 8.6. 數(shù)據(jù)庫(kù)編程 26 8.7. 性能 26 1. 概述 1.1. 引言 定義這個(gè)規(guī)范的目的是為了使工程中所有的文檔都保持一致的風(fēng)格,增加可讀性,減少人員變更/工程協(xié)作的本金,主要是基于以下幾個(gè)理由: 1、 軟件 80%以上的生命周期在維護(hù)階段 2、 任何工程都很難從頭到尾維護(hù)由原來維護(hù),風(fēng)格統(tǒng)一、格式規(guī)范的編碼可大大提高可讀性,減少新開發(fā)人員上手的時(shí)間。 3、 協(xié)作開發(fā)或?qū)ν獍l(fā)布的產(chǎn)品,代碼具有可理解性特別重要。 1.2. 考前須知 1、 制

5、定本規(guī)范的目的是為了讓代碼清楚整齊、加強(qiáng)可讀性。所有編碼務(wù)必圍繞此原則,即使是本規(guī)范中未特別指明 2、 本規(guī)范不適用于各種開源代碼。 3、本規(guī)范正文中中 黑體部分為重點(diǎn)要求,每個(gè)研發(fā)人員務(wù)必遵守。 2. 命名規(guī)范 2.1. namespace namespace 的名字應(yīng)當(dāng)都是由一個(gè)小寫單詞組成的。 namespace pub 2.2. class (類) 每個(gè)單詞的首字母要大寫。與文件一樣,每個(gè)類應(yīng)當(dāng)有一個(gè)解釋頭用來說明該類的各個(gè)方面。每單詞的首字母大寫,其它字母小寫,不加分隔符,前跟C如:CRatedCdr。 /* * A class representing a set of packe

6、t and byte counters * It is observable to allow it to be watched, but only * reports changes when the current set is complete */ 2.3. Structure 每單詞的首字母大寫,其它字母小寫,不加分隔符,前跟S如:SRatedCdr;說明:如無(wú)特別必要,Struct 的命名可以遵循 Class 的命名。Struct 中的數(shù)據(jù)的命名遵循 Class 的 Member 的命名。 2.4. 變量 2.4.1. 構(gòu)成方式 命名的構(gòu)成方式為 變量作用域 + 變量類型 + 基本

7、名 說明: 1、 變量作用域說明變量的作用范圍,用小寫,其后跟 。 2、 變量類型說明變量的數(shù)據(jù)類型,用小寫; 3、 基本名,由一個(gè)或數(shù)個(gè)單詞組成,構(gòu)成主謂、動(dòng)賓等形式,單詞的第一個(gè)字母大寫,其他字母小寫,如 Count、RatedCharge。 2.4.2. 變量作用域 變量類型 前綴 舉例 解釋 全局變量 g g nMaxBorrowDay 1、 g 說明此變量是全局變量 2、 n 指此變量是一整數(shù) 3、 MaxBorrowDay 是基本名 局部變量 無(wú) nCount 1、n 指此變量是一整數(shù) 2、Count 是基本名 類成員變量 sm m_nStudentCount sm_nStuden

8、tCount 1、m 說明此變量是類成員變量 2、s 指明此變量是靜態(tài)變量 3、n 指此變量是一整數(shù) 4、StudentCount 是基本名 2.4.3. 變量類型 標(biāo)志 類型描述 舉例 b boolean flag (TRUE, FALSE) BOOL bAbort; ch Character char chInput; n 16-bit signed integer int16 nCount; i 32-bit signed integer int32 iAmount; l 64-bit signed integer int64 llAmount; str String string st

9、rBuf; sz zero-terminated character array char* szString; p pp Pointer(指針) 指針的指針 int32* pNumber; int32* ppNumbers; a array aLine2; f Float fAmount; d double dExRate fp filepointer(File *) fpFileHandle; c class CFoo cFoo; s struct SUserInfo sUserInfo; list list/vector SUserInfoList listUserInfo; dt da

10、te dtCreated tm time tmStarted dtm datetime dtmValidate it STL 中的 iterator itFoundId map map map int ,char * mapSt; set set set int setCustomerId 2.5. 常數(shù) 全部大寫,詞與詞之間以_ _ 為分隔符。如: MAX_ _ DAY_ _ COUNT 常量的使用方式建議為 const 方式聲明,盡量少用 define。 2.6. 函數(shù) 動(dòng)詞小寫后加_分隔符,_后所跟的第一個(gè)詞小寫其他字頭大寫,只允許一個(gè)分隔符。如:get_inputString() co

11、nst int MAX_DAY_COUNT =3; const char ATTR_SERV_CLASS_ID = serv_class_id; 2.7. 全局標(biāo)識(shí)符 所有的全局類、全局枚舉類型、全局類型定義、全局函數(shù)、全局常數(shù)、全局變量務(wù)必帶模塊前綴,以保證其全局唯一性。 3. 源文件樣式 3.1. 文件名后綴 所有的 c/c+文件都務(wù)必遵守如下的樣式規(guī)矩。 c/c+程序使用以下文件后綴: 文件類別 文件后綴 頭文件 .h C 源代碼 .c 標(biāo)準(zhǔn) c+程序 .cpp Proc 源代碼 .pc 字節(jié)碼文件(windows) .obj 字節(jié)碼文件(unix/linux) .o 字節(jié)碼文件 包 (

12、windows) .lib 字節(jié)碼文件 包 (unix/linux) .a 動(dòng)態(tài)鏈接庫(kù)(windows) .dll 動(dòng)態(tài)鏈接庫(kù)(unix/linux) .so 3.2. 典型式樣 的 典型的 c+頭 頭 文件(.h) 式樣 /* 版權(quán)信息 修改日志 */ #ifndef _FILENAME_H #define _FILENAME_H Using namespace Include . /* 類描述*/ Class Public 變量與函數(shù)。 構(gòu)造函數(shù)(); /*受保護(hù)類變量描述*/ 受保護(hù)類變量; /*受保護(hù)類函數(shù)描述*/ 受保護(hù)類函數(shù)(); #endif / _FILENAME_H 3.2.

13、1. 版權(quán)信息 頭部描述文件名、內(nèi)容、修改記錄。修改記錄包括日期(YYYY/MM/DD)、創(chuàng)立者/修改者、修改內(nèi)容,新增的修改記錄排在最前。 源程序頭的解釋格式采用 doxygen 風(fēng)格的形式。 版權(quán)信息務(wù)必在 C/C+ 文件的開頭: /*! * file cccom.cpp * brief * This file defines the proxy for all communication classes. Also possible * events and errors are defined. * * Copyright (c) 2022,2022 OnewaveInc. * RCS

14、: $Id$ * * History * 1996/10/25 ReWe integration of missing return values * 1996/10/14 Andreas Welsing #pragma pack() inserted */ 其中 Copyright 和 RCS 兩行是固定的,務(wù)必包含,RCS 行從 CVS check out 后會(huì)將 $Id$ 變成類似下面的內(nèi)容,同時(shí)隨版本的更新會(huì)自動(dòng)改變: $Id: SBAccBadInvoice.cc,v 1.1.2.65 2022/01/21 06:28:49 build Exp $ 其他不需要出現(xiàn)在 doxygen

15、的信息也可以包含在這里。 3.2.2. using/include using 行要在 include 行之前,include 中標(biāo)準(zhǔn)的包名要在本地的包名之前,而且依照字母順序排列。其中 #include 表示在當(dāng)前目錄或用戶指定目錄下尋覓頭文件,#include表示在系統(tǒng)路徑目錄下尋覓頭文件。 Using namespace std; #include stdio #include string.h 3.2.3. Class 為便于界定,每個(gè)單詞的首字母要大寫。與文件一樣,每個(gè)類應(yīng)當(dāng)有一個(gè)解釋頭用來說明該類的各個(gè)方面。 /* * A class representing a set of p

16、acket and byte counters * It is observable to allow it to be watched, but only * reports changes when the current set is complete */ 類聲明換行緊跟在解釋頭后面,class 關(guān)鍵字由行首開始書寫,后跟類名稱。界定符 和 ; 應(yīng)獨(dú)占一行,并與 class 關(guān)鍵字左對(duì)其。類要以行為為中心,大多數(shù)用戶關(guān)心的是類的接口與其提供的服務(wù),而不是其實(shí)現(xiàn)。 訪問說明符:訪問說明符(public, private, 或 protected)應(yīng)當(dāng)獨(dú)占一行,并與類聲明中的class關(guān)鍵

17、字左對(duì)其。 正確地使用 const:把不改變對(duì)象規(guī)律狀態(tài)的成員都標(biāo)記為 const 成員不僅有 利于用戶對(duì)成員的理解,更可以最大化對(duì)象使用方式的靈活性及合理性。 初始化列表:應(yīng)當(dāng)盡可能通過構(gòu)造函數(shù)的初始化列表來初始化成員和基類。 public class Account: public Observable public: Account( int myMoney ) : moneyAmount( myMoney ) ; const int getSafeMoney() const / . private: int moneyAmount; 3.2.4. Class 成員變量 接下來是類的成員

18、變量: /* * Packet counters */ protected int m_anPackets; public 的成員變量務(wù)必有詳盡的解釋。proceted、private 和 namespace 定義的成員變量假如名字含義明確的話,可以沒有解釋。 3.2.5. 構(gòu)造函數(shù) 接下來是構(gòu)造函數(shù),它應(yīng)當(dāng)用遞增的方式寫(譬如:參數(shù)多的寫在后面)。 3.2.6. 類成員 函數(shù) 在每個(gè)函數(shù)的前頭,要進(jìn)行以下方面的些解釋: 各解釋部分 解釋描述 Brief 函數(shù)的功能描述(重點(diǎn)) Param 參數(shù)說明(重點(diǎn)) Return 函數(shù)返回值的說明(重點(diǎn)) 例如: /*! * brief Close t

19、he EPP service * param * service_name : service name * mode : close mode: 0 wait , 1 - force * return * CEPP_OK 成功 * CEPP_ERROR 執(zhí)行失敗,錯(cuò)誤代碼和錯(cuò)誤信息通過 epp_errmsg 獲取 */ 4. 語(yǔ)句 4.1. 簡(jiǎn)單語(yǔ)句 每行至多包含一條語(yǔ)句. . argv+; / 正確 argc-; / 正確 argv+; argc-; / 避免 4.2. 復(fù)合語(yǔ)句 (代碼塊) 復(fù)合語(yǔ)句是包含在大括號(hào)中的語(yǔ)句序列,形如 語(yǔ)句 : 被括中的語(yǔ)句應(yīng)當(dāng)較之復(fù)合語(yǔ)句縮進(jìn)一個(gè)層次 左大

20、括號(hào) 與 右大括號(hào) 均 應(yīng)另起一行并與復(fù)合語(yǔ)句首行對(duì)齊 。 大括號(hào)可以被用于所有語(yǔ)句,包括單個(gè)語(yǔ)句,只要這些語(yǔ)句是諸如 if-else 或 for操縱結(jié)構(gòu)的一部分。這樣便于添加語(yǔ)句而無(wú)需擔(dān)憂由于忘了加括號(hào)而引入 bug。 4.3. 返回語(yǔ)句 一個(gè)帶返回值的 return 語(yǔ)句不使用小括號(hào)(),除非它們以某種方式使返回值更為顯見。例如: return; return MyDisk.size(); / 正確 return (size 0 ? size :defaultSize); 4.4. if ,if-else ,if else-if else 語(yǔ)句 if- -e else 語(yǔ)句應(yīng)當(dāng)具有如下格式

21、: if (condition) statements; if (condition) statements; else statements; if (condition) statements; else if (condition) statements; else statements; 注意:if 語(yǔ)句總是用和括起來,避免使用如下簡(jiǎn)單引起錯(cuò)誤的格式: if (condition) statement; /盡量避免 4.5. for 語(yǔ)句 一個(gè) r for 語(yǔ)句應(yīng)當(dāng)具有如下格式: for (initialization; condition; update) statements; 一

22、個(gè)空的 for 語(yǔ)句(所有工作都在初始化,條件判斷,更新子句中完成)應(yīng)當(dāng)具有如下格式: for (initialization; condition; update); 當(dāng)在 for 語(yǔ)句的初始化或更新子句中使用逗號(hào)時(shí),避免因使用三個(gè)以上變量,而導(dǎo)致繁雜度提高。若需要,可以在 for 循環(huán)之前(為初始化子句)或 for 循環(huán)末尾(為更新子句)使用單獨(dú)的語(yǔ)句 。 4.6. while 語(yǔ)句 一個(gè) while 語(yǔ)句應(yīng)當(dāng)具有如下格式: while (condition) statements; 一個(gè)空的 while 語(yǔ)句應(yīng)當(dāng)具有如下格式: while (condition); 4.7. do-whi

23、le 語(yǔ)句 一個(gè) do-while 語(yǔ)句應(yīng)當(dāng)具有如下格式: do statements; while (condition); 4.8. switch 語(yǔ)句 一個(gè) h switch 語(yǔ)句應(yīng)當(dāng)具有如下格式: switch (condition) case ABC: statements; /* falls through */ case DEF: statements; break; case XYZ: statements; break; default: statements; break; case 順著往下執(zhí)行時(shí)(由于沒有 break 語(yǔ)句),尋常應(yīng)在 break 語(yǔ)句的位置添加解釋。上

24、面的例如代碼中就包含解釋/* falls through */。 4.9. try-catch 語(yǔ)句 一個(gè) try-catch 語(yǔ)句應(yīng)當(dāng)具有如下格式: try statements; catch (ExceptionClass e) statements; 5. 解釋 c/c+的解釋以最大提高可讀性為原則,解釋不宜過多或過少。 5.1. 代碼修改 代碼更新時(shí),需要在 CVS 的 Log Info 中說明姓名、日期、更新理由。 5.2. 函數(shù)解釋 在每個(gè)函數(shù)的前頭,要進(jìn)行以下方面的些解釋: 各解釋部分 解釋描述 Brief 函數(shù)的功能描述(重點(diǎn)) Param 參數(shù)說明(重點(diǎn)) Return 函數(shù)

25、返回值的說明(重點(diǎn)) 例如: /*! * brief Close the EPP service * param * service_name : service name * mode : close mode: 0 wait , 1 - force * return * CEPP_OK 成功 * CEPP_ERROR 執(zhí)行失敗,錯(cuò)誤代碼和錯(cuò)誤信息通過 epp_errmsg 獲取 */ 5.3. 行解釋 直接在本行代碼后加/進(jìn)行解釋 if( condition ) /your comments 5.4. 代碼段解釋 對(duì)代碼段的解釋信息在代碼段前說明。 /* */ if( a = b ) 6.

26、 代碼編寫格式 6.1. 代碼樣式 代碼應(yīng)當(dāng)用 unix 的格式,而不是 windows 的(譬如:回車變成回車+換行)。 6.2. 縮進(jìn) 縮進(jìn)應(yīng)當(dāng)是每行 4 個(gè)空格。不要在源文件中保存 Tab 字符。在使用不同的源代碼管理工具時(shí) Tab 字符將由于用戶設(shè)置的不同而擴(kuò)展為不同的寬度。 假如你使用 UltrEdit 作為你的 Java 源代碼編輯器的話,你可以通過如下操作來阻止保存 Tab 字符, 函數(shù)是通過 UltrEdit 中先設(shè)定 Tab 使用的長(zhǎng)度室 4 個(gè)空格,然后用 Format|Tabs to Spaces 菜單將 Tab 轉(zhuǎn)換為空格。 6.3. 頁(yè)寬 頁(yè)寬應(yīng)當(dāng)設(shè)置為 80 字符.

27、 源代碼一般不會(huì)超過這個(gè)寬度, 并導(dǎo)致無(wú)法完整顯示, 但這一設(shè)置也可以靈活調(diào)整. 在任何狀況下, 超長(zhǎng)的語(yǔ)句應(yīng)當(dāng)在一個(gè)逗號(hào)或者一個(gè)操作符后折行. 一條語(yǔ)句折行后, 應(yīng)當(dāng)比原來的語(yǔ)句再縮進(jìn) 4 個(gè)字符。 6.4. 對(duì) 中的語(yǔ)句應(yīng)當(dāng)單獨(dú)作為一行. 例如, 下面的第 1 行是錯(cuò)誤的, 第 2 行是正確的: if (i0) i + ; / 錯(cuò)誤, 和 在同一行 if (i0) i + ; / 正確, 單獨(dú)作為一行 語(yǔ)句永遠(yuǎn)單獨(dú)作為一行。假如可能,語(yǔ)句應(yīng)當(dāng)縮進(jìn)到與其相對(duì)應(yīng)的那一行相對(duì)齊的位置。 6.5. 括號(hào) 左括號(hào)和后一個(gè)字符之間不應(yīng)當(dāng)出現(xiàn)空格, 同樣, 右括號(hào)和前一個(gè)字符之間也不應(yīng)當(dāng)出現(xiàn)空格。下面的

28、例子說明括號(hào)和空格的錯(cuò)誤及正確使用: CallProc( AParameter ); / 錯(cuò)誤 CallProc(aParameter); / 正確 不要在語(yǔ)句中使用無(wú)意義的括號(hào). 括號(hào)只應(yīng)當(dāng)為達(dá)到某種目的而出現(xiàn)在源代碼中。下面的例子說明錯(cuò)誤和正確的用法: if (i) = 42) / 錯(cuò)誤 - 括號(hào)毫無(wú)意義 if (i = 42) or (j = 42) / 正確 - 確實(shí)需要括號(hào) 7. 目錄結(jié)構(gòu) 目錄結(jié)構(gòu) 目錄 工程名稱 common include lib dev bin lib conf log etc make shell conf src 子系統(tǒng) common 子模塊 子模塊. doc 7.1. 一級(jí)目錄 目錄 說明 例子 dev 用于存放編譯完成的可執(zhí)行代碼、程序庫(kù)、配置文件、日志文件。用于研發(fā)人員測(cè)試及版本發(fā)布的目錄 etc 存放編譯腳本、模版配置文件、shell 腳本 通過編譯腳本,可將 src 下的源碼編譯生成可執(zhí)行程序,并放置到 dev的目錄下;同時(shí)可將模版配置文件、shell 腳本也放置到 dev 的目錄下, 以供開發(fā)測(cè)試使用。 src 各子系統(tǒng)的源碼存放目錄。 common 存放通用庫(kù)以及開源代碼的目錄。 doc 保存 code 的流程、算法等設(shè)計(jì)文件。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論