现在的位置: 首页 > 综合 > 正文

MISRA C指导指南解读系列3(MISRA C规则11-19)

2018年04月28日 ⁄ 综合 ⁄ 共 1134字 ⁄ 字号 评论关闭

 

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; /*可以*/

 }

 

抱歉!评论已关闭.