MISRA C指导指南解读系列4(MISRA C规则20-32)

 

2.1.            声明和定义

20.所有的对象和函数标识符在使用前必须声明(R)

21.内部标识符不能与外部标识符具有相同的名称,从而隐藏的外部标识符(R)

       例如

       static int a;

       int myfunc(void) {

              int a; /* 违反该规则 */

}

22.对象的声明应该在函数范围内,除非必须要更广的范围(A)

       也就是尽量少用全局变量

23.如果可能,针对文件范围的声明必须是static属性(A

24.在相同的转换单元中,标识符在同一个转换单元中不能同时具有内部和外部链接(R

例如

static int a;

void myfunc(void)

{

       extern int a;      /* 这个是可以的 */

       static int b;

       {

              extern int b;  /* 与规则冲突 */

}

}

25.具有外部链接的标识符应该具有准确的外部声明(R

26.如果对象的声明超过一次,那么应该具有一致的声明(R)

27.外部对象不能在多个文件中进行声明(A)

28.不能使用寄存器存储对象声明(A

       也就是避免定义

              register int a;

29.名称的使用应该和声明一致(R

       例如

              struct myStruct {

              int myMember;

}

 

struct myStruct ok = {1};

struct myStruct error = {“1”};

2.2.            初始化

       30.所有自动变量在使用之前都要赋值(R

       31.在对数组和结构体的非零初始化时,应该使用大括号用来表明和匹配相应结构(R

32.在枚举中,”=”结构是不允许用来初始化成员变量的,除非是是仅仅是第一个成员或者是所有成员(R),例如

enum TEST { /* 违反规则 32*/

     X=5,

     Y,

     Z=9,

 };

 

 enum TEST2 { /*违反规则 32*/

 

     X2,

     Y2=5,

     Z2,

 };

 

 enum TEST3 { /*Ok*/

     X3,

     Y3,

     Z3,

 };

 

 enum TEST4 { /*Ok*/

     X4=2,

     Y4,

     Z4,

 };

 

 enum TEST5 { /*Ok*/

 

     X5=2,

     Y5=4,

     Z5=8,

 };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值