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

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

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

 

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,

 };

抱歉!评论已关闭.