




已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
浙江浙大網(wǎng)新眾合軌道交通工程有限公司軟件編碼規(guī)范浙江浙大網(wǎng)新眾合軌道交通工程有限公司 系統(tǒng)研發(fā)部 編制審核批準日期方輝劉湘黔文件編號ZHGD-XT-002-0版本號/修改號A/0本文件版權屬于本公司所有,未經(jīng)許可,不得復制引用文檔管理信息保密級別普通() 機密( ) 絕密( )保存期限短期( ) 長期() 永久( )文件名稱軟件編碼規(guī)范文件編號ZHGD-XT-002-0版本號A/0文檔修改記錄版本日期修改內容修改人A/02009-10-10新建文件 方輝目錄1目的12范圍13編碼規(guī)則14編碼風格74.1排版規(guī)則74.2命名規(guī)則84.3注釋規(guī)則144.4函數(shù)定義214.5變量間的間隔224.6禁止編碼中常量出現(xiàn)224.7代碼行234.8警告231 目的沒有什么軟件工程方法學可以保證可靠性代碼,但是,遵循正確的編碼規(guī)則可以顯著的減少代碼中的錯誤。鑒于目前實施高可靠性軟件開發(fā)的現(xiàn)狀,我們制定本規(guī)范的目的是為了幫助軟件開發(fā)人員更加深入地理解編碼規(guī)則,從而輔助大家更好的推動軟件編碼規(guī)則在實際工作中的制定和實施,為了保證所每個項目組編寫出的程序都符合相同的規(guī)范,便于理解和維護,便于檢查、減少出錯概率,有助于成員間交流,保證一致性、統(tǒng)一性。本文所定義的規(guī)則部分來源于MISRA C-2004,并結合本部門開發(fā)與工程實踐經(jīng)驗進行了選擇。2 范圍該規(guī)范適用于本公司所有基于C語言開發(fā)的安全苛求系統(tǒng)項目。3 編碼規(guī)則在程序設計中應該遵守以下規(guī)則:1) 過程名不能被重用2) 標號名不能被重用3) 源代碼應該使用 /*/ 類型的注釋4) 字符序列 /* 不應出現(xiàn)在注釋中5) 文件中可執(zhí)行格式化代碼行超過1500行6) 一個函數(shù)的行數(shù)應該控制在50行以內,每一行的長度應該控制80個字以內7) 不能聲明函數(shù)指針8) else語句不能為空9) 循環(huán)體要用大括號括起來10) 在非賦值表達式中不能出現(xiàn)了賦值操作符11) else中的語句要用大括號括起來12) 不能使用goto語句13) 內嵌中不能使用匯編代碼14) 過程參數(shù)不超過12個15) 參數(shù)不能使用未聲明類型16) 實參與形參個數(shù)要匹配17) 函數(shù)不能未被調用18) case語句不能為空19) 不能使用無限循環(huán)20) 使用+或者-操作符(一行中不能用多個) 21) 不能使用三重表達式22) 圈復雜度不能大于1023) 不能有未使用的函數(shù)參數(shù)24) 函數(shù)的實參不能是全局變量25) 代碼中有不能有多余變量26) 不能存在UR(變量未賦初值就引用)數(shù)據(jù)流異常27) 不能存在DU(定義后未引用就退出作用域)數(shù)據(jù)流異常(建議)28) 不能存在DD(定 義后未被引用就被再定義)數(shù)據(jù)流異常(建議)29) 不能在函數(shù)中全局變量使用與局部變量作用類似30) 不能存在未被使用的過程參數(shù)31) 函數(shù)不能有多入口32) 過程參數(shù)不能只有類型沒有標識符33) 使用恰當?shù)难h(huán)變量類型34) 循環(huán)變量必須是局部的35) 不能在函數(shù)參數(shù)表中使用省略號36) 不能使用setjmp/longjmp37) 不能使用禁用的過程,函數(shù),文件或名稱38) 不要在重新定義C+關鍵字39) 數(shù)組使用不要越界40) 在switch語句中不能沒有default 語句41) switch語句中的case語句一定要由break語句來終止42) 不能對有符號類型進行移位操作43) 移位運算不能溢出44) 禁止給無符號變量賦負值45) 不使用逗號操作符46) 禁止對實數(shù)類型的變量做相等比較操作47) 不使用不起作用的語句48) 禁止switch語句為空49) switch語句中不能只包含default 50) 過程/函數(shù)的參數(shù)表不能為空51) 返回類型為void的的過程不能出現(xiàn)在表達式中52) void類型的變量不能作為參數(shù)進行傳遞53) 指針不能指向比分配更大的范圍54) 無符號的位域不能少于個比特位的空間55) 在頭文件前不能有可執(zhí)行代碼56) 宏中不能使用了多個#和#57) 宏定義中不能包含有不允許的項58) 指針的指針不能超過兩級59) 不能使用三字母詞60) 不要使用寬串文字61) 不要使用八進制數(shù)62) 不要使用寄存器變量63) 枚舉元素的初始化要完整64) 字符類型要標明是有符號還是無符號65) 不能對變量重命名66) 不能在枚舉中重復使用一個名字67) 給變量賦的值與其類型要一致68) 實參和形參類型要一致69) 頭文件名不能使用“”、“”和“*”等字符70) 函數(shù)返回類型要一致71) 函數(shù)和函數(shù)的原型的返回要一致72) 函數(shù)和函數(shù)的原型的形參要一致73) 結構體變量的初始化類型要一致74) 結構體變量初始化的嵌套結構要一致75) 標識符不能超出31字符76) 過程在定義前不能被調用77) 變量在使用前要被聲明78) 函數(shù)沒有定義原型79) 一個文件的變量應該被聲明為靜態(tài)的80) 數(shù)組的下標要是整形81) 不能在非switch結構中使用標號82) 用typedef定義的類型名不能被重新定義83) 不能存在潛在的無限循環(huán)84) 函數(shù)參數(shù)定義的結構和調用的結構要一致85) 形參要定義86) 外部變量要有真實的聲明87) 源程序中不能使用非標準字符88) 邏輯上關聯(lián)的表達式需要括號89) 一個表達式不能有多個功能90) 不能使用指針做邏輯比較91) 宏的參數(shù)必需要有括號92) 不能使用Basic類型的聲明93) 不能使用單行注釋/94) 不能使用不正確的終止字符串95) 不能對常量值進行邏輯非的運算96) 主函數(shù)必須為int(void)或者int(int,char*)97) 不能使用嵌套注釋98) 不能對有符號類型使用位操作99) switch語句的表達式不能是邏輯表達式100) 不能使用abort,exit等函數(shù)101) 枚舉類型的不能越限使用102) 不能使用前綴“”、“”103) 不能在宏中使用“#”、“#” 104) 在同一個文件中不能有#if沒有#endif105) 數(shù)組不能沒有邊界限定106) 參數(shù)不能與全局變量同名107) 參數(shù)不能與類型或標識符同名108) 不能使用了不允許使用的頭文件109) 在整個系統(tǒng)中聲明的類型要一致110) 不同的文件中過程名不能被重用111) 在函數(shù)內部變量名不能被重用112) 在邏輯表達式中不能使用賦值操作符113) 賦值操作符與“&”或“|”不能連用114) 參數(shù)定義不能是KR風格115) 位操作符不能帶有布爾型的操作數(shù)116) 位操作符不能作用于布爾值117) 結構體中不能使用無名位域118) 不能存在不可實現(xiàn)的循環(huán)條件119) 函數(shù)原形中的參數(shù)與實際定義中的形參要一致120) 不能有無效的 #if表達式121) 函數(shù)類型不能使用Volatile或const122) 不能在宏定義中使用全局變量123) 宏定義中不能有一條注釋124) 在預處理指示中不能有一條注釋125) 不能在循環(huán)語句中有多個控制變量126) 不能在宏的內部使用關鍵字“defined”127) 不能在表達式中使用128) 不能程序預處理后存在欺騙性字符129) 不能宏擴展中有循環(huán)130) 不能被調用的過程既沒有原型也沒有定義131) 變量聲名不能很煩瑣132) 不能循環(huán)有多入口133) 過程調用不能沒有原型聲明134) 聲明語句要另起一行寫135) 外部變量應該在頭文件的開始聲明136) 在if,while,for表達式之間要有空行137) 不能在系統(tǒng)中任何地方程序都沒有被調用138) 不能存在被0除139) 宏名稱要大寫140) 指針名稱必須有后綴141) 函數(shù)名和庫函數(shù)名不能相同142) 變量名稱不能只有大小寫不同143) 不能使用以下劃線開始的變量名144) 全局類型不能沒有前綴145) 類/結構/聯(lián)合/枚舉的名稱不能以小寫字符開始146) 帶有#define的被包含文件要被保護147) 宏定義不能調用自己148) 在預處理程序中不能被0除149) for循環(huán)語句的初始化表達式不能很復雜150) for循環(huán)語句的增量表達式不能很復雜151) 不能在頭文件中定義函數(shù)152) 不能在頭文件中定義變量153) #include和文件名之間要有空格154) 指針在使用之前要檢查是不是為null155) 不能存在不可達代碼156) 注釋中不能包含代碼157) 不能往沒有打開過的文件中寫158) 文件指針在退出時要關閉159) Typedef定義的名稱不能以小寫字母開始160) Switch不能有多個default161) 宏調用時,參數(shù)個數(shù)要正確162) 標識符使用要一致163) 聲明變量不能缺少變量類型164) 結構成員名稱不能重用165) 不能強制擴展復雜的整型表達式166) 不能強制擴展復雜的浮點型表達式167) #if擴展不能包含define操作符168) 在#if中不能使用未定義的宏變量169) #include之前不能有非預處理指示170) #include 不能帶有非法條款171) 不能像使用宏一樣使用函數(shù)172) 預處理程序構造不能作為宏參數(shù)173) 在預處理程序之后不能有額外的字符174) 在同一個文件中#else不能沒有#if 175) 不能位操作帶有浮點操作數(shù)176) 內存要被釋放177) 不能從釋放內存讀數(shù)據(jù)178) 不能有矛盾的類型179) if嵌套深度不能大于5180) 參數(shù)列表中的逗號之后空格間隔181) 變量名稱與類型不能沖突182) 字符串中不能使用空字符183) 宏代碼不能超過5行184) 枚舉,結構和聯(lián)合的變量要被typedef185) 識符名稱和宏的名稱不能一致186) 編譯時要把產(chǎn)生的警告給全消除掉187) 禁止在編碼中直接出現(xiàn)頻率較高的常量,要以宏定義形式來使用188) 定義變量的同時初始化該變量4 編碼風格4.1 排版規(guī)則(推薦使用) 程序塊要采用縮進風格編寫,縮進的空格數(shù)為4個 循環(huán)、判斷等語句中若有較長的表達式或語句,則要進行適應的劃分 不允許把多個短語句寫在一行中,即一行只寫一條語句 if, while, for, default, do等語句自占一行 說明由于每個人編碼的習慣不一樣,因此在縮進時有些可能用空格鍵來縮進,從而可能會導致源代碼在不同的機子上顯示出來不整齊,因此統(tǒng)一規(guī)定縮進時以Tab鍵為準。4.2 命名規(guī)則(推薦使用)本章節(jié)是關于編碼上的函數(shù)名、變量名等命名規(guī)則的制定。 原則n 名字由prefix(前綴)和suffix(后綴)組成。但是,對于本地變量等,沒有prefix(前綴)也是可以的。n 在prefix(前綴)和suffix(后綴)之間,用underscore(_)相連接。不可用其他字符來代替underscore(_)。n 在prefix(前綴)和suffix(后綴)之間,也可以存在著subprefix。在這種情況下,各個之間,還是用underscore(_)來連接。n 作為原則,源文件名應成為prefix(前綴)。n 為了能更好區(qū)別,不介意subprefix的設置。4.2.1 變量名 規(guī)則1. 命名法遵從Hungarian記法。2. 在變量名的前綴部分文字,數(shù)字及標記號不能使用。3. 在變量名中,句號和類型說明名字不能使用。4. 變量名的長度不宜太長。5. 不能在同樣的適用范圍內,使用同樣的變量名。6. 變量名單詞和變量用途要一致性。7. API函數(shù)名、關鍵字名字等不能使用來命名變量名。 說明1. 在命名變量prefix(前綴)部分時以變量類型的縮寫接頭詞開頭書寫。在下列中,記載了系統(tǒng)開發(fā)中推薦的類型接頭詞。NO.縮寫接頭詞類型備注1cchar2hshort3iint4llong5ffloat6ddouble7bbool8bybyte9str字符串10uunsignedunsigned int類型則命名為ui11p指針unsigned int指針類型則命名為pui12g全局變量unsigned int全局類型則命名為gui13s靜態(tài)變量unsigned int靜態(tài)類型則命名為sui14fp文件指針類型2. 關于在接頭詞后繼續(xù)書寫的單詞,單詞的開頭以及各個單詞的第一個字母都以大寫開頭的形式。例) iYear uiCnt strName .3. 使用頻率較高的單詞,在以下表格中羅列出來請參照。No.原單詞意思WordNo.原單詞意思Word1Count個數(shù)Cnt36Location位置Loca2ReturnCode返回值Rtc37Position位置Posi3Relese釋放Rel38Name名字Name4Delete刪除Del39Administrator管理員Admin5Set設定Set40Period期間Perd6Get取得Get41Result結果Rslt7Put放置Put42List鏈表List8Show顯示Show43Total總計Total9Hide隱藏Hide44Sum總計Sum10Open打開Open45Control控制Ctrl11Close關閉Close46Index索引Indx12Find找到Find47Address地址Addr13Extend擴張Extd48Clear清除Clr14Insert加入Insrt49Item項目Itm15New新New50Value值Val16Old舊Old51Target對象Trgt17Start開始Start52Subject主題Sbj18End結束End53Year年Year19Quit退出Quit54Month月Month20First第一個First55Day日Day21Last最后一個Last56Hour時Hour22Up上Up57Minute分Min23Down下Down58Second秒Sec24Maximum最大值Max59User用戶Usr25Middle中間值Mid60Average平均Avg26Minimum最小值Min61Project工程Proj27Big大Big62Length長度Len28Small小Small63Version版本Ver29Buffer緩沖Buff64Status狀態(tài)Stat30Temporary臨時Temp65Detail詳細Dtil31Work工作Work66Sequence順序Seq32Source發(fā)起者Src67Array排列Arry33Destination目的地Dst68Message消息Msg34Application應用Appl69Send發(fā)送Send35Operations操作Ops70Receive接收Recv4.2.2 文件名 規(guī)則1. 程序名.c2. 程序名_功能名.c3. 共同功能名.c 說明1. 只有在程序中存在著一個源文件,則把源文件名作為prefix,即:程序名.c2. 按各個機能分割開出來的程序機能源文件名,作為subPrefix,即:程序名_機能名.c3. 對于特定的程序不依賴于共通組件的,則把那個共通組件的名字作為prefix,即:共同機能名.c4.2.3 函數(shù)名a) 規(guī)則1. prefix_word1Word2Word32. prefix_subPrefix_word1Word2Word3b) 說明1. 把源文件名作為prefix 。Word部的記述方法,作為Camel形式。例)在sample.c源文件內的函數(shù),sample_aaaBbbCcc()。例)在sample_dataGet.c源文件內的函數(shù),sample_dataGet_aaaBbbCcc()。2. 在源文件沒有分割的情況下,在源文件內設立函數(shù)組,這種情況下,要增加subPrefix部分。例)在sample_dataGet.c文件內設立了檢索數(shù)據(jù)的函數(shù)組,sample_dataGet_findDB_aaaBbbCcc()。4.2.4 宏定義c) 規(guī)則全部以大寫字母來書寫,并且對于命名的名字要和實踐用途要一致,PREFIX_WORD。d) 說明在定義宏的源文件中,以原文件名作為prefix段。例)在sample.c源文件內定義宏,則SAMPLE_ABC。4.2.5 結構體標記名e) 規(guī)則t_prefix_word。f) 說明在定義結構體時,結構體標記名以t_開頭,后接定義的prefix以源文件名。例)在sample.c源文件中定義的結構體,其標記名如下:struct t_sample_aaa;4.2.6 結構體typedef名g) 規(guī)則TPrefix_Word。h) 說明在定義typedef情況下,typedef名的定義以大寫T開頭,Prefix段以原文件名及后面Word的開頭字母都以大寫形式。例)在sample.c源文件內,結構體typedef名的定義如下:typedef struct t_sample_aaaTSample_Aaa;4.2.7 枚舉enum定義i) 規(guī)則Eprefix_Word。j) 說明枚舉enum是存在著多種值的情況下定義的,因此也伴隨著typedef的定義。枚舉名的定義跟結構體名的定義是一樣的,只不過定義的名字以E為開頭。例)在sample.c源文件內的枚舉enum定義:typedef enumsDataResult1 = 0,sDataResult2,ESample_DataResult;4.3 注釋規(guī)則(推薦使用)本章節(jié)記述了在軟件開發(fā)過程中文件、函數(shù)的header的記載內容及評語。有關注釋的全部規(guī)約如下:1. 注釋的語言最好用英語或中文進行記述,不要用其他語言。2. 不要記述無用的注釋。3. 禁止與處理有差異的評語的記述。4.3.1 頭文件的全部構成/*-開頭部分-*/*-*/預處理塊定義/*-*/*-*/Includes導入.h文件/*-*/類或者外部接口函數(shù)的聲明下面舉例了一個具體的例子/*-*(C) COPYRIGHT 2008 BY ZHEDAWANGXIN CORPORATION ALL RIGHTS *RESERVED*Data:2008.6.30*Author:guanwx*Version:v0.01*File:chgNum.h*Note:chgNum.c的頭文件,外部接口函數(shù)和類的聲明。-*/#ifndefCHGNUM_H /*防止chgNum.h被重復引用*/#defineCHGNUM_H/*-*/#include /*引用標準庫的頭文件*/#include “myheader.h” / 引用非標準庫的頭文件/*-*/void chgNum_shortToString(); /*全局函數(shù)聲明*/class CBox /*類結構聲明*/;#endif4.3.2 源文件的全部構成以下描述了源文件的全部構成。/*-開頭部分-*/更改履歷/*-*/Includes導入.h文件/*-*/Macros宏的定義/*-*/Table & Globals內部結構體、全局變量、靜態(tài)變量的定義/*-*/文件內部函數(shù)的原型內部函數(shù)的聲明/*-*/內部函數(shù)內部函數(shù)群4.3.3 開頭部分源文件的開頭部分以下面形式說明:/*-*(C) COPYRIGHT 時間 BY 公司名CORPORATION ALL RIGHTS RESERVED*Data:時間*Author:作者名*Version:版本號*File:文件名*Note:文件作用說明/*-*/下面舉例了一個具體的例子/*-*(C) COPYRIGHT 2008 BY ZHEDAWANGXIN CORPORATION ALL RIGHTS *RESERVED*Data:2008.6.30*Author:guanwx*Version:v0.01*File:chgNum.c*Note:在本文件里提供的以下各個函數(shù)。* - chgNum_shortToString() short型的數(shù)值轉換成字符串類型* - chgNum_longToString() long型的數(shù)值轉換成字符串類型-*/4.3.4 更改履歷/*-*時間 作者*說明-*/下面舉例了一個具體的例子/*-*2008.6.30 guanwx*新增加函數(shù)chgNum_shortToDollar()*修改函數(shù)chgNum_shortToString()-*/4.3.5 宏定義的注釋宏定義的注釋按下面來規(guī)定/* 宏定義的說明和注釋 */#define MACRO 100#define MACRO 100 /* 宏定義的說明和注釋 */4.3.6 內部結構體、全局和靜態(tài)變量定義對于文件內部結構體、全局、靜態(tài)變量定義的注釋按下來說明/* 結構體的用處說明 */typedef struct t_sampleint iInitFlag; /*標志是否初始化過*/unsigned short uhMsgStat;/* 消息發(fā)收的狀態(tài)消息發(fā)收狀態(tài)值表示- 0:還未發(fā)送- 1:已收完- 2:已送完 */ TSample;int giCnt = 0; /*對此全局變量的注釋和說明*/int siCnt = 0; /*對此靜態(tài)變量的注釋和說明*/4.3.7 函數(shù)開頭部分的注釋函數(shù)的開頭部分的注釋按以下來說明/*-*Function:函數(shù)名* Brief:功能* Param:param1 說明* param2 說明* Retval:返回值*Author:作者*Data:日期-*/ 函數(shù)沒有帶參數(shù)時,則只需寫void。 函數(shù)沒有返回值時,則不用寫。下面舉例了一個具體的例子/*-*Function:chgNum_shortToString* Brief:short型的數(shù)值轉換成字符串* Param:sNum IN 要變換的對象值* pStr OUT 轉換后的字符串* Retval:變換成功時:字符串的長度* 變換失敗時:0*Author:guanweixin*Data:2008.6.30-*/unsigned short chgNum_shortToString(signed short sNum,char *pStr) 4.3.8 函數(shù)內部處理的注釋在函數(shù)內部處理中,基本上以下面兩種方式進行注釋。/* 注釋和說明 */下面舉例了一個具體的例子unsigned short chgNum_shortToString(signed short sNum,char *pStr)/* 初期化處理 */* 用0x00預先處理輸出時所指向的內存 */* 取得用于輸出時所指向內存的地址 */* 輸出時所指向內存里的開頭符號設定 */* 判定輸入數(shù)值的正負號 */* 每個對應的ASCII碼的轉換 */ /* 輸出用的參數(shù)設定 */ /* 計算字符串的長度 */ /* 字符串長度的返回 */4.4 函數(shù)定義(推薦使用) 規(guī)則1) 函數(shù)所帶的參數(shù)較多時,要改行描述,要使得參數(shù)排版整潔。2) 函數(shù)不帶參數(shù)時,則用void來描述。 說明作成函數(shù)存在著較多參數(shù)時,則改行來寫。不良風格例子良好風格例子int Sample( int iParam1, int iParam2, int iParam3, int iParam4 )int
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- JJF 2252-2025機動車檢測用渦流式金屬探傷儀校準規(guī)范
- 銅壓延加工環(huán)境保護與綠色生產(chǎn)考核試卷
- 鑄造工藝參數(shù)優(yōu)化與生產(chǎn)效率提升考核試卷
- 鉛鋅礦資源勘查與開發(fā)利用實踐案例分析考核試卷
- 急救物品管理制度
- 創(chuàng)傷弧菌感染防治要點
- 消化呼吸循環(huán)系統(tǒng)圖譜解讀
- 新生兒心臟病教學查房
- 簡易呼吸皮囊使用
- 歷史明清時期:統(tǒng)一多民族封建國家的鞏固與發(fā)展單元卷 2024-2025學年部編版七年級歷史下學期
- 2025年四川省遂寧市中考語文試卷及答案
- GB/T 45700-2025物業(yè)管理術語
- 人教版(2024)八年級下冊物理期末復習:知識點清單+重難點考點 學案
- 2025年高考江蘇卷物理高考真題+解析(參考版)
- 小學數(shù)學一年級下冊《思維能力》訓練題(共6組-附答案)
- 綜合辦公室 試題及答案
- 2025超市水果的采購合同
- 安全生產(chǎn)管理制度范本
- 農(nóng)行現(xiàn)金機具管理制度
- 2024-2025人教版一年級下冊數(shù)學期末考試卷附答案 (三套)
- 【MOOC】土木工程制圖-同濟大學 中國大學慕課MOOC答案
評論
0/150
提交評論