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

 }

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值