軟件編碼規(guī)范詳述(doc 98頁).doc_第1頁
軟件編碼規(guī)范詳述(doc 98頁).doc_第2頁
軟件編碼規(guī)范詳述(doc 98頁).doc_第3頁
軟件編碼規(guī)范詳述(doc 98頁).doc_第4頁
軟件編碼規(guī)范詳述(doc 98頁).doc_第5頁
已閱讀5頁,還剩90頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

軟軟軟軟軟軟件件件件件件編編編編編編碼碼碼碼碼碼規(guī)規(guī)規(guī)規(guī)規(guī)規(guī)范范范范范范 文件編號 RDC DED SCS SPC 00 當前版本 作 者 審 核 人 文件狀態(tài) 草稿 正式發(fā)布 正在修改 完成日期 中國人民銀行清算總中心 支付系統(tǒng)開發(fā)中心 文檔修訂記錄 版本編號變化狀態(tài)簡要說明日期變更人批準日期批準人 注 變化狀態(tài) A 增加 M 修改 D 刪除 目目 錄錄 第一篇第一篇C C C C 編碼規(guī)范編碼規(guī)范 6 6 第一章第一章代碼組織代碼組織 6 6 第二章第二章命名命名 9 9 2 1文件命名 9 2 2變量命名 9 2 3常量與宏命名 10 2 4類命名 10 2 5函數(shù)命名 10 2 6參數(shù)命名 11 第三章第三章注釋注釋 1212 3 1文檔化注釋 12 3 2語句塊注釋 17 3 3代碼維護注釋 20 第四章第四章編碼風格編碼風格 2222 4 1排版風格 22 4 2頭文件 26 4 3宏定義 27 4 4變量與常量 30 4 5條件判斷 32 4 6空間申請與釋放 33 4 7函數(shù)編寫 33 4 8類的編寫 37 4 9異常處理 40 4 10特殊限制 40 第五章第五章編譯編譯 4141 第六章第六章ESQL CESQL C 編碼編碼 4646 第二篇第二篇JAVAJAVA 編碼規(guī)范編碼規(guī)范 4747 第一章第一章代碼組織代碼組織 4848 第二章第二章命名命名 5151 2 1包命名 51 2 2類命名 51 2 3接口命名 51 2 4方法命名 51 2 5變量命名 51 2 6類變量命名 52 2 7常量命名 52 2 8參數(shù)命名 52 第三章第三章注釋注釋 5353 3 1文檔化注釋 53 3 2語句塊注釋 57 3 3代碼維護注釋 59 第四章第四章編碼風格編碼風格 6161 4 1排版風格 61 4 2包與類引用 66 4 3變量與常量 66 4 4類編寫 67 4 5方法編寫 68 4 6異常處理 71 4 7特殊限制 71 第五章第五章編譯編譯 7373 第六章第六章JSPJSP 編碼編碼 7474 6 1文件命名及存放位置 74 6 2內容組織 74 6 3編碼風格 76 6 4注釋 78 6 5縮進與對齊 78 6 6表達式 79 6 7JavaScript 79 第三篇第三篇POWERBUILDERPOWERBUILDER 編碼規(guī)范編碼規(guī)范 8080 第一章第一章代碼組織代碼組織 8181 第二章第二章命名命名 8282 2 1文件命名 82 2 2對象命名 82 2 3變量命名 84 2 4常量命名 85 2 5函數(shù)與事件命名 85 2 6參數(shù)命名 85 第三章第三章注釋注釋 8585 3 1文檔化注釋 85 3 2語句塊注釋 88 3 3代碼維護注釋 88 第四章第四章編碼風格編碼風格 8989 4 1界面風格 89 4 2排版風格 93 4 3變量與常量 95 4 4條件判斷 96 4 5空間申請與釋放 97 4 6函數(shù)編寫 97 4 7特殊限制 97 第五章第五章SQLSQL 編碼編碼 9898 前前 言言 程序編碼是一種藝術 既靈活又嚴謹 充滿了創(chuàng)造性與奇思妙想 然而應用軟件設計是一 項團結協(xié)作工程 而非程序員展示個人藝術的舞臺 大型應用軟件項目更是由很多程序員組成 的大型開發(fā)團隊協(xié)同完成的 每個程序員都有自己的編碼經驗與風格 如果缺乏統(tǒng)一的編程規(guī) 范 則可能導致軟件產品最終程序代碼風格迥異 可讀性與可維護性均較差 不僅給程序代碼 的理解帶來障礙 也增加維護階段的工作量 此外 經驗證明不規(guī)范的編碼行為往往還會導致 程序出現(xiàn)更多的隱含錯誤 為規(guī)范編碼行為 增強程序代碼的可讀性 可維護性 提高編碼質量與效率 保障應用軟 件產品整體品質與可持續(xù)開發(fā)性 特制定本規(guī)范 本規(guī)范分 C C 編碼規(guī)范 Java 編碼規(guī)范 PB 編碼規(guī)范三篇 分別從代碼組織 命名 注釋 編碼風格 編譯等方面加以闡述 規(guī)范文本 分為規(guī)則與建議兩種 其中規(guī)則是強制執(zhí)行的條款 建議則由程序員根據(jù)實際情況靈活掌握 第一篇第一篇C C C C 編碼規(guī)范編碼規(guī)范 第一章第一章代碼組織代碼組織 規(guī)則規(guī)則 1 1 使用不同的文件分別放置模塊的約束與實現(xiàn) C 程序的約束文件使用 hpp 做擴展 名 實現(xiàn)文件使用 cpp 做擴展名 C 程序的約束文件使用 h 做擴展名 實現(xiàn)文件使用 c 做擴展 名 規(guī)則規(guī)則 2 2 一個模塊可以包含一個類或功能上緊密聯(lián)系的多個類 禁止將功能關聯(lián)松散的多 個類 放置到一個模塊中 規(guī)則規(guī)則 3 3 模塊約束應僅包含模塊對外提供的功能 禁止將模塊內部使用的功能聲明在模塊 約束中 下例中 IsChineseChar 是內部使用的函數(shù) 不提供給外部應用使用 因此不能在 commpub hpp 中增加聲明 例 commpub hpp BOOL IsChineseString const char sInStr 例 commpub cpp staticstatic BOOLBOOL IsChineseChar constIsChineseChar const char char s s BOOL IsChineseString const char sInStr for int ii 0 ii strlen sInStr ii if IsChineseChar sInStr ii return FALSE return TRUE 規(guī)則規(guī)則 4 4 簡單應用應創(chuàng)建下列目錄結構 模塊程序代碼應分別放置到 src include 目錄與 src source 目錄 編譯文件放置到 src source 目錄 編譯后的可執(zhí)行文件放置到 rel bin 目錄 靜態(tài)庫或動態(tài)庫放置到 rel lib 目錄 應用使用的外部庫及頭文件放置在 rel 同級的 lib 與 lib include 目錄 Work Directory src source makefile cpp c include hpp h rel bin lib 規(guī)則規(guī)則 5 5 復雜應用應分子系統(tǒng)創(chuàng)建目錄結構 模塊程序代碼應分別放置到 src module include 目錄與 src module source 目錄 應用編譯文件放置到 src 目錄 編譯后 的可執(zhí)行文件放置到 rel bin 目錄 靜態(tài)庫或動態(tài)庫放置到 rel lib 目錄 應用使用的外部庫 及頭文件放置在 rel 同級的 lib 與 lib include 目錄 規(guī)則規(guī)則 6 6 各子系統(tǒng)可以創(chuàng)建獨立的編譯文件并放置到 src module source 目錄 編譯后的 可執(zhí)行文件放置到 rel bin module 目錄或 rel bin 靜態(tài)庫或動態(tài)庫放置到 rel lib module 或 rel lib 目錄 此時 應創(chuàng)建一個編譯全部子系統(tǒng)的編譯文件或腳本放置到 src 目錄 Work Directory module1 source makefile cpp c include hpp h rel bin lib module2 source makefile cpp c include hpp h makefile make sh src module1 bin lib module2 bin lib 第二章第二章命名命名 規(guī)則規(guī)則 7 7 命名應遵循下列原則 應簡單清晰通俗 應使用英文命名 禁止使用中文命名 應盡量選擇通用詞匯 應使用完整單詞或詞組 避免使用簡稱 應準確表達其含義 避免同時使用易混淆的字母與數(shù)字 如 1 與 l 0 與 o 禁止使用只靠大小寫區(qū)分的多個名稱 多單詞組成的名稱 單詞的首字母應大寫 如 FileName 規(guī)則規(guī)則 8 8 名稱太長超過 15 字符時應使用簡稱 簡稱應遵循 應使用標準的或常用的簡寫 如 Temp tmp Length len 應用范圍內簡寫應一致且規(guī)范 避免各處簡寫各不相同 簡寫可以使用單詞的前一個或多個字母 如 Channel Chan Connect Conn 也 可以使用去掉所有的不在詞頭的元音字母 如 screen scrn primtive prmv 多個單詞組成的名稱 使用有意義的單詞或去掉無用的后綴并簡稱 如 Count of Failure FailCnt Paging Request PagReq 2 12 1文件命名文件命名 規(guī)則規(guī)則 9 9 文件命名應使用模塊名的小寫字母形式 禁止使用漢字或大 小寫字母混用作為 代碼文件名 2 22 2變量命名變量命名 規(guī)則規(guī)則 10 10 變量命名主要采用匈牙利命名法 格式為 作用域范圍前綴 前綴 基本類型 名 稱 其中 作用域范圍前綴 前綴以小寫字母表示且可選 基本類型以小寫字母表示且必選 常用前綴符常用前綴符 前綴符含義例子 g 全局變量g stSystem g cMacType g strSysName s 靜態(tài)變量s nCurCnt s strStaticName s pSysTime m 類數(shù)據(jù)成員m nBankType m sWrkBuffer m strMyName h 句柄類變量hnFileHandle hnSocket hpProcHandle p 指針類變量psReadBuff pstrRetStr ppTarget a 數(shù)組類變量anPorts asSendBuffers apWrkBuffs 常用基本類型符常用基本類型符 前綴符含義例子 bbool bOK bQuit bFind c ch char cFlag cBankType chSubSystemType schar sSysName sStaticName sTimeStr str CString String strSysName strStaticName strTimeStr byunsign char byMacStr bySendBuffer bySrcBuffer n i int nCnt nPort nRetCode llong lFileSize lOffset lCount ddouble dAmount dSumVal dWrkVal ffloatfAmount fSumVal fWrkVal ui ulunsigned int longuiCnt uiFileSize ulRetCount wWORD 與 unsigned int 等價的 32 位整數(shù) dwDOUBLE WORD 與 unsigned long 等價的 64 位整數(shù) em 枚舉型變量 emDays emColors emSet st 結構型編碼stSystem stCtrlData stSet 規(guī)則規(guī)則 11 11 禁止使用單字母作為變量名 但下列常用單字母變量除外 常用單字母變量常用單字母變量 變量類型說明 i j k m nint 循環(huán)變量 cchar 單字符變量 schar 字符數(shù)組變量 x yint 位置變量 pchar 指針變量 2 32 3常量與宏命名常量與宏命名 規(guī)則規(guī)則 12 12 常量與宏應使用全大寫名稱 多詞組名稱使用 分隔各單詞 并使用斷行注釋說明 其含義如 const int MAX BUFF SIZE 1024 最大存儲區(qū)字節(jié)數(shù) define MAX FRAME SIZE 512 單幀的最大長度 規(guī)則規(guī)則 13 13 作為錯誤碼或返回碼的宏 應使用 E 類型 NAME 形式 并使用斷行注釋說明其含 義 define E FILE NOTFOUND 61101001 文件不存在 define E DB SELECT FAIL 62301050 選取數(shù)據(jù)庫失敗 define E SYS INVALID STATUS 62301001 系統(tǒng)狀態(tài)非法 規(guī)則規(guī)則 14 14 作為編譯條件的宏 應使用 形式 如 ifdef NONE THROW endif ifndef FOR CCPC endif 規(guī)則規(guī)則 15 15 為防止重復包含而定義的頭文件預處理宏 應使用 NAME HPP C 或 NAME H C 形式 其中 NAME 為模塊名稱 如 ifndef CSIGNAL HPP define CSIGNAL HPP endif ifndef CSIGNAL H define CSIGNAL H endif 2 42 4類命名類命名 規(guī)則規(guī)則 16 16 類命名應使用字符 C T 名稱形式 其中名稱應使用名詞或名詞短語 且每個單詞 首字母大寫 如 CSignal CFile CString CTagMgr 2 52 5函數(shù)命名函數(shù)命名 規(guī)則規(guī)則 17 17 函數(shù)命名應使用能夠表達函數(shù)功能的英文動詞或動賓結構短語 且每個單詞的首 字母大寫 如 GetName StrTrimLeft KillProc 禁止在函數(shù)名稱中使用非字母或數(shù) 字的其他字符 如下劃線 建議建議 1 1 不應在函數(shù)名中使用數(shù)字 如 GetName1 Kill2 但數(shù)字是短語一部分的 可以使用 如 KillSigusr2 2 62 6參數(shù)命名參數(shù)命名 建議建議 2 2 函數(shù)或方法的參數(shù)命名參考變量命名 但應使用 In Out Ret 等簡寫修飾參數(shù) 增加函數(shù)聲明的可讀性 如 BOOL IsSpaceStr LPCSTR sInStr ULONG nMaxLen 0 ULONG plRetOffset NULL void HexToBin LPCSTR sInStr BYTE psOutStr ULONG plRetSize NULL 第三章第三章注釋注釋 規(guī)則規(guī)則 18 18 程序代碼中增加注釋的目標是幫助對程序的閱讀理解 不宜太多或太少 太多則 會對閱讀產生干擾 太少則不利于代碼理解 因此只在必要的地方才加注釋 且準確 易懂 簡潔 3 13 1文檔化注釋文檔化注釋 3 1 13 1 1文件注釋文件注釋 規(guī)則規(guī)則 19 19 文件注釋放置在文件頭部 主要包括此文件的功能說明 編寫人和修改人以及編 寫和修改的日期 版權聲明 版本等信息 應盡量使用中文 注釋格式如下 file filename hppfilename hpp brief 文件簡要說明文件簡要說明 文件詳細說明文件詳細說明 author 時間時間 作者作者 1 1 貢獻貢獻 1 1 時間 作者 2 貢獻 2 時間 作者 3 貢獻 3 version 時間時間 版本版本 1 1 簡要版本說明簡要版本說明 1 1 時間 版本 2 簡要版本說明 2 par 其他重要信息 其他重要信息說明 warning 警告信息 par 版權信息 版本聲明信息版本聲明信息 例 file csignal hpp brief UNIX 信號函數(shù)封裝類 本類封裝部分 UNIX 信號處理函數(shù) 簡化在 UNIX 下編寫信號處理程序的編碼難度 本類主要提供下列三類方法 信號集合管理 提供信號集合的添加 刪除 判斷功能 信號句柄管理 提供設置與獲取信號處理函數(shù)功能 信號處理 設置與獲取阻塞信號集 發(fā)送信號 等待信號功能 author 2007 03 05 lny 創(chuàng)建初始版本 2007 03 07 lny 添加文檔注釋信息 version 2007 03 05 V1 0 創(chuàng)建初始版本 2007 03 07 V2 0 添加文檔注釋信息 warning 本類不能在 WIN32 操作系統(tǒng)使用 par 版權信息 Copyright C Copyright C 2007 20072007 2007 CNCC CDCCNCC CDC 注 粗體字為需定制化的內容 蘭色字為可選的內容 如果沒有這些內容 請刪除 下同 3 1 23 1 2類注釋類注釋 規(guī)則規(guī)則 20 20 類注釋放置在類聲明前 主要介紹類的功能及相關說明 注釋格式如下 brief 類簡要說明類簡要說明 類詳細說明類詳細說明 par 其他重要信息 其他重要信息說明 par 變更歷史 時間 作者 修改說明 例 brief UNIX 信號處理函數(shù)封裝類 本類封裝部分 UNIX 信號處理函數(shù) 簡化在 UNIX 下編寫信號處理程序的編碼難度 本類主要提供下列三類方法 信號集合管理 提供信號集合的添加 刪除 判斷功能 信號句柄管理 提供設置與獲取信號處理函數(shù)功能 信號處理 設置與獲取阻塞信號集 發(fā)送信號 等待信號功能 warning 本類不能在 WIN32 操作系統(tǒng)使用 class CSignal 3 1 33 1 3函數(shù)或方法注釋函數(shù)或方法注釋 規(guī)則規(guī)則 21 21 函數(shù)或方法注釋放置在其聲明前 主要介紹函數(shù)的功能 參數(shù) 返回值 異常 使用說明 范例 引用關系 變更信息等信息 注釋格式如下 brief 函數(shù)功能簡要說明函數(shù)功能簡要說明 param in out 參數(shù)名稱 1 參數(shù) 1 簡要說明 param in out 參數(shù)名稱 2 參數(shù) 2 簡要說明 return 返回值說明 返回值 1 返回值 1 說明 返回值 2 返回值 2 說明 exception 異常說明 異常 1 異常 1 說明 異常 2 異常 2 說明 note 函數(shù)功能詳細說明 詳細說明 1 詳細說明 2 warning 警告信息 deprecated 函數(shù)即將失效警告 see 引用說明 par 使用范例 code 例子程序 endcode par 算法或流程說明 詳細算法或流程說明 par 變更歷史 時間 作者 修改說明 例 brief 添加一個或多個信號到信號集合 param out stSet 要操作的信號集合 param in nSignal 要添加到集合的信號 param in nOtherSignal 要添加到集合的其他信號 return 添加失敗返回負整數(shù) 失敗原因可以從 errno 獲取 note 如果要添加多個信號 則必須使用 0 作為最后一個信號 warning 如果添加多個信號時沒有使用 0 作結束 則程序可能異常中止 see DelFromSet AddAllToSet ClearSet par 使用范例 code int nRetCode sig AddToSet if nRetCode 0 Fail nRetCode sig AddToSet if nRetCode 0 Fail endcode int AddToSet sigset t stSet int nSignal int nOtherSignal 0 建議建議 3 3 重要的或復雜的函數(shù) 應提供算法說明或使用范例 如 例 brief 根據(jù)行號與密碼生成報尾校驗碼作為身份認證串 param in sBankCode 行號 param in sPassword 密碼 return 身份認證串 par 算法介紹 計算 sBankCode sPassword 的 MD5 數(shù)字摘要 輸出 32 位字符 取 32 位字符的 0 5 10 15 16 21 26 31 位作 16 位字符串的偶數(shù)位 取 AUTHBEPS 各位作 16 位字符串的奇數(shù)位 加密這 16 位的字符串 得到 32 位的字符串作為認證串 CString BuildAuthStr LPCSTR sBankCode LPCSTR sPassword 3 1 43 1 4數(shù)據(jù)成員注釋數(shù)據(jù)成員注釋 規(guī)則規(guī)則 22 22 類的每個數(shù)據(jù)成員均使用斷行注釋 注釋格式如下 例 class CMTMsg private BOOL m bBodyInFile 是文件型報文 CString m strFileName 文件型報文的文件名 CString m strBody 直接設置的報體串 CMTMsgHeader m Header 報頭對象 CMTMsgTail m Tail 報尾對象 CMTBatHeader m BatHeader 批量業(yè)務頭對象 3 1 53 1 5結構注釋結構注釋 規(guī)則規(guī)則 23 23 結構可使用簡單注釋 也可使用與類相同的注釋格式 其數(shù)據(jù)成員使用斷行注釋 注釋格式如下 例 報頭結構 總長度 138 字節(jié) struct CMTHeaderMap char blockMark 3 報頭塊前綴 1 char verID 1 版本號 保留 0 char mesgLen 6 報文總長度 保留 目前為空白 char appTradeCode 8 業(yè)務碼 0 位 系統(tǒng)號 1 3 位 CMT 號 4 位 節(jié)點 5 7 位 保留 char startAddr 12 報文源地址 即報文發(fā)起人 char destAddr 12 報文目標地址 即報文接收人 char mesgPurp 1 報文用途 保留 char outForm 1 輸出標識 保留 char mesgID MSGID LEN 報文標識號 報文發(fā)起人生成 通信層唯一確定 一個報文 char mesgReqNo REQUESTID LEN 報文參考號 報文發(fā)起人生成 回應報文帶 回進行報文匹配 char workDate 8 報文日期 格式為 YYYYMMDD char sentTime 14 報文時間 格式為 YYYYMMDDHHMISS char expTime 4 報文有效期 保留 0 0 xFFFF 65535 char deliTime 6 報文提交時間 保留 格式為 HHMISS char mesgPRI 1 報文優(yōu)先級 0 x0 0 xF 15 char reserve 20 保留域 char finalMark 1 報頭塊后綴 3 1 63 1 6宏與變量注釋宏與變量注釋 規(guī)則規(guī)則 24 24 宏與變量使用簡單注釋或斷行注釋 特別重要的宏可以使用與類相同的文檔注釋 注釋格式如下 例 define MBT PREFIX 報文塊開始標志 define MBT SUFFIX 報文塊結束標志 define MBT HEADER 1 報頭塊開始標志 define MBT BUSINESSHEADER 2 業(yè)務頭塊開始標志 define MBT BUSINESSDATA 3 正文塊開始標志 define MBT TAIL C 報尾塊開始標志 define MBT FILE F 文件說明塊開始標志 define MBT BATHEADER B 批量信息塊開始標志 define TAG PREFIX TAG 名開始標志 define TAG SUFFIX TAG 名結束標志 define MSGID LEN 20 報文標識號長度 MSGID define REQUESTID LEN 20 報文參考號長度 REQID 例 業(yè)務頭保留域長度 define CMTBH RESERVED LEN 16 例 brief 短報文正文體最大長度 此長度應根據(jù) MQCMT 類定義最大消息長度進行調整 超過此長度的報文應分為多個報 文片斷傳輸 par 計算公式 code 最大長度 MQCMT 消息長度 sizeof CMTMsgHeader sizeof CMTMsgTail sizeof MQMsg 1 MQCMT 最大消息長度 175 endcode 目前 MQCMT 類定義的最大消息長度為 1M 1048576 字節(jié) define SHORT MSGBODY MAX LEN 1000000 3 1 73 1 7文檔注釋技巧文檔注釋技巧 建議建議 4 4 為使 doxygen 工具能生成更好的文檔 編寫文檔注釋時參考下列技巧 注釋中使用的標識符前后均應留一個空格 以便 doxygen 識別此標識符 并自動生成 一個引用連接 如 par CMT 報文格式說明 CMT 報文由報頭 CMTMsgHeader 可選的批量業(yè)務頭 CMTBatHeader 正文 體 報尾 CMTMsgTail 組成 其中除正文體外 其余各塊都是定長的 正文體由一個或多個業(yè)務塊組成 每個業(yè)務塊由一個定長的業(yè)務頭 CMTBusinessHeader 與一個變長正文塊 CMTBusinessData 組成 正文塊 CMTBusinessData 由一個或多個 TAG 碼 TAG 值對 報文域 組成 部分 TAG 值又可由多個定長子域組成 正文體可放置在報文中 也可存儲在文件中 而在報文中僅放置文件名 當正文體在文件中 則說明批量業(yè)務頭 業(yè)務頭 正文塊存儲在文件中 注釋中可使用 HTML 標記美化最終文檔 但別濫用美化標記 較長的文檔注釋需要分段說明時 使用分段 如果需要段首縮進兩字符 使用全 角的空格 文檔注釋中可以使用 par 增加一個小節(jié) 靈活使用此標記可以任意地擴展文檔的結構 滿足特殊描述的需要 如 par 算法原理 計算機內部運算使用的基數(shù)是 2 即滿 2 進位 如果計算機字長為 32 位 則最大 可以表示的整數(shù)為 4294967296 為了突破計算機最大整數(shù)的限制 可以采取兩種做法 一是擴大基數(shù) 二是增加字 長 根據(jù)此原理 本類使用 65536 作為基數(shù) 每個整數(shù)的最大位數(shù) 10 unsigned int array 10 因此可以最大整數(shù)是 65536 的 10 次方 約 1 4e48 通過變更基數(shù)或位數(shù) 本類理 論上可以處理的任意整數(shù) 需要生成圓點列表時使用 需要生成編號列表時使用 需要特別說明一段文字 可以使用 code endcode 如 par 計算公式 code 最大長度 MQCMT 消息長度 sizeof CMTMsgHeader sizeof CMTMsgTail sizeof MQMsg 1 MQCMT 最大消息長度 175 endcode 為使 doxygen 正確生成函數(shù)或方法的連接 注釋中的函數(shù)名或方法名前后應留一個空 格 如該函數(shù)或方法沒有重載 則不必使用參數(shù)列表 如 GetTag 如該函數(shù)或方法 重載 則應必須使用參數(shù) 類型 列表 如 GetTag LPCSTR AMOUNT return 清除行計數(shù) static int nLineChars 0 輸出的行長度計數(shù) if bResetLineChars 行計數(shù)復位 nLineChars 0 計算輸出長度 int nOutLen 2 4 nInpLen 3 1 考慮到要添加回車換行 多分配點空間 char p strOutStr GetBufferSetLength nOutLen memset p 0 nOutLen 例 邏輯性較強 1 BankCode Password CString strWrkStr sWrkBankCode sWrkPassword 2 計算 MD5 指紋 CString strMD5 md5 HashBuffer BYTE strWrkStr GetBuffer 0 strWrkStr GetLength 3 選取八位數(shù)字指紋 char p strMD5 GetBuffer 0 char sTmpStr 17 int ii 0 memset sTmpStr 0 sizeof sTmpStr for ii 0 ii 8 ii sTmpStr 2 ii p 4 ii ii 4 4 組合固定串 p AUTHBEPS for ii 0 ii80 字符 或表達式應分成多行書寫 語句應在逗號分隔符處劃分新 行 表達式應在低優(yōu)先級操作符處劃分新行 操作符放在新行之首 劃分出的新行要進行適當 的縮進 使排版整齊 語句易讀 例 if IsNumberString stCIS410Detail sBankCode strlen stCIS410Detail sBankCode 12 strcmp stCIS410Detail sBankCode stCIS410Detail sOrgBankCode 0 應書寫為 If IsNumberString stCIS410Detail sBankCode strlen stCIS410Detail sBankCode 12 strcmp stCIS410Detail sBankCode stCIS410Detail sOrgBankCode 0 THROW OUT E INVALIDLIST StrPrint 票交機構行別非數(shù)字或長度非 3 位 s stCIS410Detail sClsCode GetBuffer 0 應書寫為 THROW OUT E INVALIDLIST StrPrint 票交機構行別非數(shù)字或長度非 3 位 s stCIS410Detail sClsCode GetBuffer 0 建議建議 8 8 對結構的多個數(shù)據(jù)成員賦值時 將等號對齊 例 rect top 0 rect left 0 rect right 300 rect bottom 200 應書寫為 rect top 0 rect left 0 rect right 300 rect bottom 200 建議建議 9 9 定義多個宏或初始化多個變量時 將值對齊 例 define MBT PREFIX 報文塊開始標志 define MBT SUFFIX 報文塊結束標志 define MBT HEADER 1 報頭塊開始標志 define MBT BUSINESSHEADER 2 業(yè)務頭塊開始標志 define MBT BUSINESSDATA 3 正文塊開始標志 define MBT TAIL C 報尾塊開始標志 define MBT FILE F 文件說明塊開始標志 define MBT BATHEADER B 批量信息塊開始標志 define TAG PREFIX TAG 名開始標志 define TAG SUFFIX TAG 名結束標志 應書寫為 define MBT PREFIX 報文塊開始標志 define MBT SUFFIX 報文塊結束標志 define MBT HEADER 1 報頭塊開始標志 define MBT BUSINESSHEADER 2 業(yè)務頭塊開始標志 define MBT BUSINESSDATA 3 正文塊開始標志 define MBT TAIL C 報尾塊開始標志 define MBT FILE F 文件說明塊開始標志 define MBT BATHEADER B 批量信息塊開始標志 define TAG PREFIX TAG 名開始標志 define TAG SUFFIX m chMsgType MQ MT TAIL iSegmentFlag SF LASTSEGMENT strncpy ptr m pBody char pTail sizeof CMTTailMap return Put LPCSTR ptr strMsgId sizeof MQMsg sizeof CMTTailMap 1 iSegmentFlag nPriority iFeedbackCode 應書寫為 ptr m chMsgType MQ MT TAIL iSegmentFlag SF LASTSEGMENT strncpy ptr m pBody char pTail sizeof CMTTailMap return Put LPCSTR ptr strMsgId sizeof MQMsg sizeof CMTTailMap 1 iSegmentFlag nPriority iFeedbackCode 規(guī)則規(guī)則 33 33 比較操作符 賦值操作符 算術操作符 邏輯操作符 位域操作符等雙目運算符 前后應加空格與操作數(shù)隔開 例 i i 1 if i 10 i i 2 應書寫為 i i 1 if i 10 i ii 2 規(guī)則規(guī)則 34 34 逗號 分號后面應加空格 但前面不應加空格 例 for int ii 0 ii 10 ii 應書寫為 for int ii 0 ii 10 for ii 0 ii 10 for ii 0 ii m nNamem nName str str 應書寫為 CString str stSet GetName strOrgName stSet GetName strOrgName if str str uname uname pOldSet m nNamepOldSet m nName str str 4 1 34 1 3括號使用括號使用 規(guī)則規(guī)則 37 37 復雜的表達式應使用括號以避免二義性 不應依賴運算符優(yōu)先級 如 if i 0 i 12 p 1 規(guī)則規(guī)則 38 38 位運算時應使用括號 如 i nSumVal 4 規(guī)則規(guī)則 39 39 return 與 throw 非函數(shù) 不應使用括號 如 return nRetCode 4 24 2頭文件頭文件 規(guī)則規(guī)則 40 40 頭文件應使用防止重復包含宏括整個頭文件部分 宏名應為 模塊名 HPP 或 模塊名 H 注意 注意 endif endif 后必須保留一個空行 否則部分編譯器會報警告信息 后必須保留一個空行 否則部分編譯器會報警告信息 規(guī)則規(guī)則 41 41 本模塊需要的頭文件以及外部函數(shù) 應全部列在本模塊頭文件的首部且緊臨防重 復包含宏 并按先系統(tǒng)級 公共級 應用級 本模塊級的順序擺放 盡量不在實現(xiàn)文件中包含 除本模塊頭文件外的其他頭文件以及外部函數(shù) 規(guī)則規(guī)則 42 42 頭文件引用禁止含路徑信息 無論是全路徑還是相對路徑 規(guī)則規(guī)則 43 43 禁止在頭文件中定義變量或常量 例 頭文件 cis401 hpp ifndef MODULE NAME HPP define MODULE NAME HPP include include include PUBLIB src include common hpp PUBLIB src include common hpp include include include cispub hpp include cispub hpp intint g nUserCodeg nUserCode 0 0 endif 例 實現(xiàn)文件 cis401 cpp include include include include cstring hpp cstring hpp include include include cis401 hpp include cis401 hpp externextern longlong GetFileSize LPCSTRGetFileSize LPCSTR sFileName sFileName cis401 hpp 應書寫為 ifndef MODULE NAME HPP define MODULE NAME HPP include include include common hpp include cstring hpp include cispub hpp extern long GetFileSize LPCSTR sFileName extern int g nUserCode endif cis401 cpp 應書寫為 include cis401 hpp int g nUserCode 0 4 34 3宏定義宏定義 建議建議 15 15 靈活使用編譯宏解決平臺或版本的兼容性問題 例 cpp ifdef WIN32 in WIN32 void printTrace LPCSTR lpName LPCSTR lpText char szTmp 4096 memset szTmp 0 sizeof szTmp va list argList va start argList lpText vsprintf szTmp vsprintf szTmp lpText lpText argList argList va end argList fprintf stderr s s s n StrCurrentTime YYYY MM DD HH MM SS GetBuffer 0 lpName szTmp else in UNIX void printTrace LPCSTR lpName LPCSTR lpText char szTmp 4096 memset szTmp 0 sizeof szTmp va list argList va start argList lpText vsprintf szTmp vsprintf szTmp lpText lpText argList argList va end argList fprintf stderr s s s n StrCurrentTime YYYY MM DD HH MM SS GetBuffer 0 lpName szTmp endif 應修改為 hpp ifdef WIN32 define define vsprintfvsprintf vsprintf vsprintf endif cpp void printTrace LPCSTR lpName LPCSTR lpText char szTmp 4096 memset szTmp 0 sizeof szTmp va list argList va start argList lpText vsprintf szTmp vsprintf szTmp lpText lpText argList argList va end argList fprintf stderr s s s n StrCurrentTime YYYY MM DD HH MM SS GetBuffer 0 lpName szTmp 規(guī)則規(guī)則 44 44 宏表達式的變量應使用括號括 使用宏時應避免傳遞表達式給宏變量 例 define MAX a b a b a b 應書寫為 define MAX a b a b a b 調用 int nMax MAX i b 應書寫為 int nTmpi i int nTmpb b int nMax MAX nTmpi nTmpb 規(guī)則規(guī)則 45 45 單條語句構成的宏不應使用分號作為宏結束 多條語句構成宏時 應使用花括號 括宏體 例 define ThrowExceptionExt sFileName nErrCode sExtMsg ThrowFileExceptionExt FILE LINE sFileName nErrCode sExtMsg return nErrCode define RETCODE n return n 應書寫成 define ThrowExceptionExt sFileName nErrCode sExtMsg ThrowFileExceptionExt FILE LINE sFileName nErrCode sExtMsg return nErrCode define RETCODE n return n 規(guī)則規(guī)則 46 46 構成宏體的語句必須完成 禁止包含語句塊的部分 例 define CLEAR ALL n for int ii 0 ii n ii CLEAR ALL strlen str str ii 0 define CLEAR ALL n for int ii 0 ii n ii str ii 0 以上兩例應書寫為 define CLEAR ALL str n for intint iiii 0 0 ii n ii str ii 0 即使這樣 代碼依然是不安全的 應避免在宏中定義變量 規(guī)則規(guī)則 47 47 禁止使用宏替換關鍵字 如下列為不良寫法 define MYENUM enum MYENUM err E DATE 1 E TIME 2 建議建議 16 16 使用 enum 或 const int 或 inline 函數(shù)代替宏 例 define MAX FRAME SIZE 1024 define ERR DATE 1 define ERR TIME 2 define ERR TASK NO 3 define ExitOnFail if g nErrCode 0 return g nErrCode 應書寫為 const int MAX FRAME SIZE 1024 enum ERR TYPE ERR DATE 1 ERR TIME 2 ERR TASK NO 3 inline int ExitOnFail if g nErrCode 0 return g nErrCode 4 44 4變量與常量變量與常量 規(guī)則規(guī)則 48 48 避免使用與全局變量 外部變量同名的局部變量 禁止使用關鍵字 保留字 函 數(shù)名作為變量名 如下列為不良寫法 例 int nMaxSize 100 intint strlenstrlen 1 for int ii 0 ii 0 n c 應書寫為 unsignedunsigned intint c 127 charchar n n 10 while n 0 n c 建議建議 23 23 不要將常量強制轉換為變量 有時可能導致系統(tǒng)崩潰 4 54 5條件判斷條件判斷 規(guī)則規(guī)則 53 53 if 語句的判斷條件必須是邏輯表達式 不應使用 C 默認的 0 為 false 非 0 為 true 的規(guī)則 如 例 char p strstr abc a ifif p p 應書寫為 char p strstr abc a ifif p p NULL NULL char p str while p while p p 應書寫為 char p str while pwhile p 0 0 p for int ii 10 iiii ii 應書寫為 for int ii 10 iiii 0 0 ii 規(guī)則規(guī)則 54 54 禁止對邏輯表達式進行比較操作 如 例 if ii 10 bQuit bQuit TRUE TRUE IsContinue IsContinue FALSEFALSE 應書寫成 if ii 10 bQuitbQuit IsContinue IsContinue 規(guī)則規(guī)則 55 55 避免對浮點類型作等于或不等于判斷 應根據(jù)應用的實際情況使用范圍判斷 如 金額的小數(shù)位為兩位 則判斷金額是否為零 可以寫成 if dAmount 0 0001 4 64 6空間申請與釋放空間申請與釋放 規(guī)則規(guī)則 56 56 使用 C 的 new 操作符申請空間 使用 delete 操作符釋放空間 new 申請的數(shù) 組空間 應使用 delete 釋放 申請空間后 釋放空間前 應判斷指針是否為 NULL 釋放空 間后應賦值該指針為 NULL 避免重復釋放空間 規(guī)則規(guī)則 57 57 盡量在申請空間的函數(shù)內部釋放空間 否則應妥善傳遞申請的空間指針 并在合 適的時間釋放 避免內存泄漏 4 74 7函數(shù)編寫函數(shù)編寫 規(guī)則規(guī)則 58 58 仔細選擇函數(shù)的參數(shù)并盡量減少參數(shù)個數(shù) 沒有參數(shù)時明確地使用 void 說明 參 數(shù)是數(shù)組類型的 使用數(shù)組類型而非指針類型 參數(shù)是類對象的 盡量使用對象的引用或對象 指針 參數(shù)是大數(shù)據(jù)變量的 必須使用引用或指針 可默認值的參數(shù)盡量指定默認值 規(guī)則規(guī)則 59 59 函數(shù)入口點應檢查每個參數(shù)的合法性 規(guī)則規(guī)則 60 60 仔細安排參數(shù)的位置 最常用的參數(shù)放置在最前面 輸入?yún)?shù)盡量放置在左邊 輸出參數(shù)盡量放置在右邊 規(guī)則規(guī)則 61 61 顯式聲明函數(shù)的返回值 沒有返回值的使用 void 說明 返回指針的函數(shù) 使用 NULL 作為錯誤返回 禁止返回局部變量的指針或引用 規(guī)則規(guī)則 62

溫馨提示

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

評論

0/150

提交評論