




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、MISRA 2004規(guī)則Jerry整理出處:汽車工業(yè)軟件可靠性聯(lián)會最后更新時間:2005-7-20轉(zhuǎn)載請注明:來自Sawin系統(tǒng)分析之窗MISRA (The Motor Industry Software Reliability Association 汽車工業(yè)軟件可靠性聯(lián)會) 是位于英國的一個跨國汽車工業(yè)協(xié)會,其成員包括了大部分歐美汽車生產(chǎn)商。其核心使命是為汽車工業(yè)提供服務(wù)和協(xié)助,幫助廠方開發(fā)安全的、高可靠性的嵌入式軟件。這個組織最出名的成果是所謂的MISRA C Coding Standard,這一標(biāo)準(zhǔn)中包括了127條C語言編碼標(biāo)準(zhǔn),通常認為,如果能夠完全遵守這些標(biāo)準(zhǔn),則你的C代碼是易讀、
2、可靠、可移植和易于維護的。最近很多嵌入式開發(fā)者都以MISRA C來衡量自己的編碼風(fēng)格,比如著名的uC/OS-II就得意地宣稱自己99遵守MISRA標(biāo)準(zhǔn)。而嵌入式開發(fā)雜志也專門載文號召大家學(xué)習(xí)。編碼規(guī)范通常是一個公司自定的“土政策”,居然有人去做標(biāo)準(zhǔn),而且還得到廣泛的認可,這不禁引起我強烈的興趣??上н@份標(biāo)準(zhǔn)的文本需要花錢去買,而且短短幾十頁,要價非常昂貴。MISRA在網(wǎng)上公布了一些文檔,其中有關(guān)于MISRA C Coding Standard的Clarification報告,從中間你可以大致猜到MISRA標(biāo)準(zhǔn)本身是什么。我仔細閱讀了這些文檔,并且通過閱讀其他一些介紹性文檔,大致了解了MISRA
3、標(biāo)準(zhǔn)的主要內(nèi)容。這些條款確有過人之處,對于C/C+語言工程項目的代碼質(zhì)量管理能夠起到良好的指導(dǎo)性作用,對于大部分軟件開發(fā)企業(yè)來說,在MISRA的基礎(chǔ)上適當(dāng)修改就可以形成自己的規(guī)范。當(dāng)然其中也有一些過于嚴(yán)苛的東西,這就需要各個開發(fā)部門靈活處理了。我個人的體會,編碼規(guī)范雖然很簡單,但是要完全執(zhí)行,不折不扣,需要開發(fā)部門有很高的組織性和紀(jì)律性,并且有很好的代碼評審機制。因此,如果能夠嚴(yán)格地遵守編碼規(guī)范,本身就是一個開發(fā)部門實力的證明。內(nèi)容<環(huán)境>Rule1.1(強制):所有的代碼應(yīng)該遵守ISO 9899:1990“Programming Language C
4、”Rule1.2(強制):只有當(dāng)具備統(tǒng)一接口的目標(biāo)代碼的時候才可以采用多種編譯器和語言Rule1.4(強制) 檢查編譯器/連接器以確保支持31一個有效字符,支持大小寫敏感<語言擴展>Rule 2.1(強制):匯編語言應(yīng)該封裝起來并且隔離:例如:#define NOP asm(“ NOP”)Rule 2.2(強制) :源代碼只能采用/*/風(fēng)格的注釋Rule2.3(強制): 字符序列/*不能在注釋中使用注:C語言不支持注釋的嵌套即使一些編譯器支持這個語言擴展Rule 2.4(建議):代
5、碼段不能注釋掉注:應(yīng)采用#IF 或者#ifdef來構(gòu)成一個注釋,否則代碼里如果有注釋會改變代碼的作用<文檔化>Rule 3.3(建議):編譯器對于整數(shù)除法運算的實施應(yīng)該寫入文檔例編譯器:-5/3 = -1 余-2 有些編譯器結(jié)果是-2于1<字符集>Rule 4.1(強制):只能使用ISO標(biāo)準(zhǔn)定義的字符集<標(biāo)識符>Rule6.5 (強制):在內(nèi)部范圍的標(biāo)識符不能和外部的標(biāo)識符用同樣的名字,因為會隱藏那個標(biāo)識符例:Int16_t i:Void f()int16_t
6、 I;i=3;Rule 5.2(強制): typedef 名稱只能唯一,不能重復(fù)定義Rule 5.4(強制): 標(biāo)記名應(yīng)該是唯一的標(biāo)識符Rule 5.7(建議):標(biāo)識符不能重復(fù)使用<類型>Rule 6.1(強制):Char類型只能用來存儲使用字符Rule 6.2(強制):signed和unsigned char 只能用來存儲和使用數(shù)據(jù)值Rule6.3(建議)對于基本的類型使用Typedef來表示大小和有無符號例:Typedef char char_tTy
7、pedef signed int int32_t <約束>Rule 7.1(強制):不要用八進制數(shù)注:整型常數(shù)以”0“開始會被認為是8進制例:code1=109 code2=100 code3=052 code4=071如果是對總線消息初始化,會有危險<聲明和定義>Rule
8、 8.1(強制):函數(shù)都應(yīng)該有原型聲明,且相對函數(shù)定義和調(diào)用可見Rule8.2 (強制):無論何時一個對象和函數(shù)聲明或者定義,它的類型應(yīng)該明確聲明Rule 8.5(強制):頭文件中不要定義對象或者函數(shù)Rule8.3(強制):每個函數(shù)聲明中的參數(shù)的類型應(yīng)該和定義中的類型一致Rule 8.8(強制):外部變量或者函數(shù)只能聲明在一個文件中注:一般來講,聲明在頭文件中,然后包含在定義和使用的文件中Rule 8.12(強制):數(shù)組聲明為外部,應(yīng)該明確聲明大小或者直接初始化確定例:extern int array2
9、; /* 違反Rule8.8 */<初始化>Rule 9.1(強制):所有變量在使用之前都應(yīng)該賦值<數(shù)學(xué)類型轉(zhuǎn)換(隱式)>Rule 10.1(強制):整型表達式不要隱式轉(zhuǎn)換為其他類型: a)轉(zhuǎn)換到更大的整型 b)表達式太復(fù)雜 c)表達式不是常數(shù)是一個函數(shù) d)表達式不是一個常數(shù)是一個返回表達式Rule 10.2(強制):浮點數(shù)表達
10、式不要隱式轉(zhuǎn)換為其他類型: a)轉(zhuǎn)換到更大的浮點數(shù) b)表達式太復(fù)雜 c)表達式是一個函數(shù) d)表達式是一個返回表達式<數(shù)學(xué)類型轉(zhuǎn)換(明確)>Rule 10.3(強制):整型表達式的值只能轉(zhuǎn)換到更窄小且是同樣符號類型的表達式Rule 10.4(強制):浮點表達式的值只能轉(zhuǎn)換到更窄小的浮點表達式<數(shù)學(xué)類型轉(zhuǎn)換>Rule 10.6(強制):所有的 uns
11、igned類型都應(yīng)該有后綴”U“Rule 11.1(強制):指針不能轉(zhuǎn)換為函數(shù)或者整型以外的其他類型<表達式>Rule12.2(強制):表達式的值應(yīng)和標(biāo)準(zhǔn)允許的評估順序一致例:X=bi + i+;不同的編譯器給出的結(jié)果不一樣,bi是否先執(zhí)行?應(yīng):x=bi; i+;比如:X=func(i+,i);Rule12.3(強制):sizeof操作符不能用在包含邊界作用(side effect)的表達式上例:Int32_t=i;Int32_t=j;j=sizeof(i=12
12、34);表達式并沒有執(zhí)行,只是得到表達式類型int的sizeRule 12.4(強制):邏輯操作符&&或者|右邊不能包含邊界作用(side effect)例:If(ishight) && (x= i+),如果ishight0那么i+不會評估Rule 12.3(建議):+和- -不能和其他表達式用在一個表達式中例:U8a=+u8b + u8c-;<控制語句表達式>Rule13.1(強制):賦值語句不能用在一個產(chǎn)生布爾值的表達式中例:If(x=y)!=0)更差:If
13、 (x=y)Rule13.3(強制):浮點表達式不應(yīng)該測試其是否相等或者不相等Rule13.4(強制):for控制表達式中不要包含任何浮點類型Rule13.6(強制):數(shù)字變量作為for循環(huán)的循環(huán)計數(shù)不要在循環(huán)體內(nèi)部被修改例:Flag=1;For(i=0;(i<5)&&(flag=1);i+)Flag=0;i=i+3;<控制流>Rule 14.1(強制):不要有執(zhí)行不到的代碼例:Swich(event)Case www;
14、160;do_wakeup(); break; do_more();Rule 14.4(強制):goto語句不能使用Rule 14.5(強制):continue不能使用Rule 14.6(強制):函數(shù)應(yīng)在函數(shù)結(jié)束有一個出口Rule 14.7(強制):witch,while,do .while,for語句體應(yīng)是一個
15、混合語句(括號)Rule 14.10(強制):所有ifelse if結(jié)構(gòu)都應(yīng)該由else結(jié)束<Switch語句>Rule 15.3(強制):switch的最后應(yīng)是defaultRule 15.4(強制):switch表達式不能使用布爾表達式例:Switch(x=0) Rule 15.5(強制):每一個Switch語句都應(yīng)該有一個case例:Switch(x)Uint8_t var; /* 違反*/Case 0:A=b;<函數(shù)>Rule16.2(強制):函數(shù)不能直接或者間接
16、的調(diào)用自己注:safe-related 系統(tǒng)不能用遞歸,超出堆棧空間很危險Rule16.8(強制):non-void類型函數(shù)的所有出口路徑都應(yīng)該有一個明確的return語句表達式<指針和數(shù)組>Rule17.1(強制):指針的數(shù)學(xué)運算只能用在指向數(shù)組的地址上Rule17.3(強制):>,>=,<,<=不能用在指針類型除非指向同一個數(shù)組Rule 17.5(建議):不要用2級以上指針<結(jié)構(gòu)和聯(lián)合>Rule18.4(強制)不要用Union<預(yù)處理指令>Rule19.1(建議):i nclude語句的前面只能有其他預(yù)處理指令和注釋Rule19.2(建議):i nclude指令中的頭文件名稱不能包含非標(biāo)準(zhǔn)的字符Rule19.5(強制):宏不能在函數(shù)體內(nèi)定義Rule19.8(強制):類函數(shù)宏調(diào)用時不能沒有它的參數(shù)<標(biāo)準(zhǔn)庫>Rule20.1(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工健康與工作效率關(guān)系-洞察及研究
- 安全生產(chǎn)月活動培訓(xùn)內(nèi)容
- 生產(chǎn)經(jīng)營單位安全生產(chǎn)規(guī)章制度必須符合什么
- 飼料工業(yè)0轉(zhuǎn)型-洞察及研究
- 零售業(yè)態(tài)智能化升級-洞察闡釋
- 無人機配送技術(shù)研究-洞察闡釋
- 教育政策的實施與區(qū)域發(fā)展研究
- 音樂IP價值評估-洞察闡釋
- 土地公共管理與政策研究-洞察闡釋
- 消防安全演練活動計劃
- 出口空運知識培訓(xùn)課件
- 視頻監(jiān)控系統(tǒng)維護保養(yǎng)方案
- 《DNS域名解析原理》課件
- 《慢性阻塞性肺疾病的診斷與治療》課件
- 衛(wèi)生院用電安全知識培訓(xùn)
- 七八年級的英語單詞
- 舞臺使用合同范例
- 2024年面向社會公開招聘警務(wù)輔助人員報名信息表
- 《地區(qū)智能電網(wǎng)調(diào)度技術(shù)支持系統(tǒng)應(yīng)用功能規(guī)范》
- 2024中國類風(fēng)濕關(guān)節(jié)炎診療指南
- 11294營銷管理-國家開放大學(xué)2023年1月至7月期末考試真題及答案(共2套)
評論
0/150
提交評論