小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

MISRA C 2004規(guī)范

 共同成長888 2015-04-20

原文:http://blog.163.com/verilog_007/blog/static/7404420820089942125877/

<環(huán)境>
Rule1.1(強制):所有的代碼應(yīng)該遵守ISO 9899:1990“Programming Language C”

Rule1.2(強制):只有當(dāng)具備統(tǒng)一接口的目標(biāo)代碼的時候才可以采用多種編譯器和語言

Rule1.4(強制) 檢查編譯器/連接器以確保支持31一個有效字符,支持大小寫敏感


<語言擴(kuò)展>

Rule 2.1(強制):
語言應(yīng)該封裝起來并且隔離:

例如:#define NOP asm(“    NOP”)


Rule 2.2(強制) :源代碼只能采用/*…*/風(fēng)格的注釋

Rule2.3(強制): 字符序列/*不能在注釋中使用

注:C語言不支持注釋的嵌套即使一些編譯器支持這個語言擴(kuò)展


Rule 2.4(建議):代碼段不能注釋掉

注:應(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 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_t

Typedef signed int int32_t


<約束>

Rule 7.1(強制):不要用八進(jìn)制數(shù)

注:整型常數(shù)以”0“開始會被認(rèn)為是8進(jìn)制

例:code[1]=109

          code[2]=100

          code[3]=052

          code[4]=071

如果是對總線消息初始化,會有危險

<聲明和定義>

Rule 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[ ]    /* 違反Rule8.8 */


<初始化>

Rule 9.1(強制):所有變量在使用之前都應(yīng)該賦值


<數(shù)學(xué)類型轉(zhuǎn)換(隱式)>

Rule 10.1(強制):整型表達(dá)式不要隱式轉(zhuǎn)換為其他類型:

      a)轉(zhuǎn)換到更大的整型

      b)表達(dá)式太復(fù)雜

      c)表達(dá)式不是常數(shù)是一個函數(shù)

      d)表達(dá)式不是一個常數(shù)是一個返回表達(dá)式


Rule 10.2(強制):浮點數(shù)表達(dá)式不要隱式轉(zhuǎn)換為其他類型:

      a)轉(zhuǎn)換到更大的浮點數(shù)

      b)表達(dá)式太復(fù)雜

      c)表達(dá)式是一個函數(shù)

      d)表達(dá)式是一個返回表達(dá)式


<數(shù)學(xué)類型轉(zhuǎn)換(明確)>

Rule 10.3(強制):整型表達(dá)式的值只能轉(zhuǎn)換到更窄小且是同樣符號類型的表達(dá)式

Rule 10.4(強制):浮點表達(dá)式的值只能轉(zhuǎn)換到更窄小的浮點表達(dá)式


<數(shù)學(xué)類型轉(zhuǎn)換>

Rule 10.6(強制):所有的 unsigned類型都應(yīng)該有后綴”U“

Rule 11.1(強制):指針不能轉(zhuǎn)換為函數(shù)或者整型以外的其他類型


<表達(dá)式>

Rule12.2(強制):表達(dá)式的值應(yīng)和標(biāo)準(zhǔn)允許的評估順序一致


例:

X=b + i++;

不同的編譯器給出的結(jié)果不一樣,b是否先執(zhí)行?

應(yīng):x=b;

         i++;

比如:

X=func(i++,i);

Rule12.3(強制):sizeof操作符不能用在包含邊界作用(side effect)的表達(dá)式上


例:

Int32_t=i;

Int32_t=j;

j=sizeof(i=1234);

表達(dá)式并沒有執(zhí)行,只是得到表達(dá)式類型int的size


Rule 12.4(強制):邏輯操作符&&或者||右邊不能包含邊界作用(side effect)


例:

If(ishight) && (x== i++)),如果ishight=0那么i++不會評估


Rule 12.3(建議):++和- -不能和其他表達(dá)式用在一個表達(dá)式中

例:

U8a=++u8b + u8c--;


<控制語句表達(dá)式>

Rule13.1(強制):賦值語句不能用在一個產(chǎn)生布爾值的表達(dá)式中

例:

If((x=y)!=0)…

更差:

If (x=y)…


Rule13.3(強制):浮點表達(dá)式不應(yīng)該測試其是否相等或者不相等

Rule13.4(強制):for控制表達(dá)式中不要包含任何浮點類型

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;

            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)是一個混合語句(括號)

Rule 14.10(強制):所有if…else if結(jié)構(gòu)都應(yīng)該由else結(jié)束


<Switch語句>

Rule 15.3(強制):switch的最后應(yīng)是default

Rule 15.4(強制):switch表達(dá)式不能使用布爾表達(dá)式

例:

Switch(x==0)

{

… …

}

Rule 15.5(強制):每一個Switch語句都應(yīng)該有一個case

例:

Switch(x)

{

Uint8_t var; /* 違反*/

Case 0:

A=b;


}


<函數(shù)>

Rule16.2(強制):函數(shù)不能直接或者間接的調(diào)用自己

注:safe-related 系統(tǒng)不能用遞歸,超出堆??臻g很危險


Rule16.8(強制):non-void類型函數(shù)的所有出口路徑都應(yīng)該有一個明確的return語句表達(dá)式


<指針和數(shù)組>

Rule17.1(強制):指針的數(shù)學(xué)運算只能用在指向數(shù)組的地址上

Rule17.3(強制):>,>=,<,<=不能用在指針類型除非指向同一個數(shù)組

Rule 17.5(建議):不要用2級以上指針


<結(jié)構(gòu)和聯(lián)合>

Rule18.4(強制)不要用Union


<預(yù)處理指令>

Rule19.1(建議):#include語句的前面只能有其他預(yù)處理指令和注釋

Rule19.2(建議):#include指令中的頭文件名稱不能包含非標(biāo)準(zhǔn)的字符

Rule19.5(強制):宏不能在函數(shù)體內(nèi)定義

Rule19.8(強制):類函數(shù)宏調(diào)用時不能沒有它的參數(shù)


<標(biāo)準(zhǔn)庫>

Rule20.1(強制):標(biāo)準(zhǔn)庫中的保留標(biāo)識符,宏和函數(shù)不能定義,重定義,和undefined

Rule20.4(強制):動態(tài)內(nèi)存分配不能使用

注:不能使用:malloc,calloc,free,realloc

Rule20.9(強制):輸入輸出庫(stdio.h)不能用在產(chǎn)生嵌入式系統(tǒng)中

Rule20.12(強制):時間處理函數(shù)<time.h>不能使用


<運行時故障>

Rule 21.1(強制):通過使用一下手段確保把運行時故障最小化:

– 靜態(tài)分析工具/技術(shù)

– 動態(tài)分析工具/技術(shù)

– 編寫明確的代碼避免運行時錯誤





    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多