乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      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ù)定義和調(diào)用可見

      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ù)學類型轉(zhuǎn)換(隱式)>

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

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

            b)表達式太復雜

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

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


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

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

            b)表達式太復雜

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

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


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

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

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


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

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

      Rule 11.1(強制):指針不能轉(zhuǎn)換為函數(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ù)不能直接或者間接的調(diào)用自己

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


      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ù)宏調(diào)用時不能沒有它的參數(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)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多