MISRA C指導指南解讀系列3(MISRA C規則11-19)

 

2.1.            標識符

11.標識符不能依賴於多於31個字符的意義。編譯器和鏈接器應該可以支持31個字符的外部標識符(R)

12.不同域名空間的標識符的名稱應該具有不同的拼寫,結構體成員除外(A)

2.2.            類型

13.基本的類型,charintshortlongdouble,和float不應該被使用。應該使用編譯器通過typedef定義的等價規定長度類型的名稱(A

14char類型應該聲明成unsigned char 或者是signed charR

       char類型會根據不同的編譯器被默認爲unsigned char signed char

15.浮點類型的使用應該遵循明確的浮點標準(A)

16.程序員不能使用任何潛在的位表示的浮點數(R)

例如在IEEE754中:

typedef struct {

unsigned int mantissa1;

unsigned int mantissa0:31;

unsigned int one:1;

unsigned int exponent:15;

unsigned int negative:1;

unsigned int empty:16;

} _longDouble; // 80 bits intel long double

typedef struct {

unsigned int mantissa1;

unsigned int mantissa0:20;

unsigned int exponent:11;

unsigned int sign:1;

} _Double; // 64 bit double

 

typedef struct {

unsigned int mantissa:23;

unsigned int exponent:8;

unsigned int sign:1;

} _Float; // 32 bit float

              以及浮點向整型數的類型轉換。

 

17.採用typedef的名字不能被其它標識符使用(R)

例如:

       typedef char mychar;

       void mycall() {

              char mychar; /* 與規則17發生衝突*/

 

}

2.3.            常數

18.數值常數應該添加後綴以表明類型(A)

void mycall()

 {

     unsigned long a = 65537; /* 與規則18衝突 */

     unsigned long b = 65537UL; /*  可以 */

     return;

 }

19.八進制常數不運行使用,零是可以的(R)

void myCall() {

     int code1= 07; /*與規則19衝突*/

     int code2= 7;  /*可以*/

     int code3 = 00; /*可以*/

 }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章