小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕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(強制):所有的代碼應該遵守ISO 9899:1990“Programming Language C”

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

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


<語言擴展>

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

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


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

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

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


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

注:應采用#IF 或者#ifdef來構成一個注釋,否則代碼里如果有注釋會改變代碼的作用


<文檔化>

Rule 3.3(建議):編譯器對于整數(shù)除法運算的實施應該寫入文檔

例編譯器:-5/3 = -1 余-2 有些編譯器結果是-2于+1


<字符集>

Rule 4.1(強制):只能使用ISO標準定義的字符集


<標識符>

Rule6.5 (強制):在內(nèi)部范圍的標識符不能和外部的標識符用同樣的名字,因為會隱藏那個標識符


例:

Int16_t i:

Void f()

{

int16_t I;

i=3;

}


Rule 5.2(強制): typedef 名稱只能唯一,不能重復定義

Rule 5.4(強制): 標記名應該是唯一的標識符

Rule 5.7(建議):標識符不能重復使用


<類型>

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(強制):不要用八進制數(shù)

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

例:code[1]=109

          code[2]=100

          code[3]=052

          code[4]=071

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

<聲明和定義>

Rule 8.1(強制):函數(shù)都應該有原型聲明,且相對函數(shù)定義和調用可見

Rule8.2 (強制):無論何時一個對象和函數(shù)聲明或者定義,它的類型應該明確聲明

Rule 8.5(強制):頭文件中不要定義對象或者函數(shù)

Rule8.3(強制):每個函數(shù)聲明中的參數(shù)的類型應該和定義中的類型一致

Rule 8.8(強制):外部變量或者函數(shù)只能聲明在一個文件中

注:一般來講,聲明在頭文件中,然后包含在定義和使用的文件中

Rule 8.12(強制):數(shù)組聲明為外部,應該明確聲明大小或者直接初始化確定

例:extern int array2[ ]    /* 違反Rule8.8 */


<初始化>

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


<數(shù)學類型轉換(隱式)>

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

      a)轉換到更大的整型

      b)表達式太復雜

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

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


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

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

      b)表達式太復雜

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

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


<數(shù)學類型轉換(明確)>

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

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


<數(shù)學類型轉換>

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

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


<表達式>

Rule12.2(強制):表達式的值應和標準允許的評估順序一致


例:

X=b + i++;

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

應:x=b;

         i++;

比如:

X=func(i++,i);

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


例:

Int32_t=i;

Int32_t=j;

j=sizeof(i=1234);

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


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


例:

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


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

例:

U8a=++u8b + u8c--;


<控制語句表達式>

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

例:

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

更差:

If (x=y)…


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

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;

            do_wakeup();

            break;

            do_more();


}


Rule 14.4(強制):goto語句不能使用

Rule 14.5(強制):continue不能使用

Rule 14.6(強制):函數(shù)應在函數(shù)結束有一個出口

Rule 14.7(強制):witch,while,do ...while,for語句體應是一個混合語句(括號)

Rule 14.10(強制):所有if…else if結構都應該由else結束


<Switch語句>

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

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

例:

Switch(x==0)

{

… …

}

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

例:

Switch(x)

{

Uint8_t var; /* 違反*/

Case 0:

A=b;


}


<函數(shù)>

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

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


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


<指針和數(shù)組>

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

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

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


<結構和聯(lián)合>

Rule18.4(強制)不要用Union


<預處理指令>

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

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

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

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


<標準庫>

Rule20.1(強制):標準庫中的保留標識符,宏和函數(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)分析工具/技術

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

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





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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多