您的位置:首页 > 其它

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

2009-04-21 16:43 375 查看

2.1. 标识符

11.标识符不能依赖于多于31个字符的意义。编译器和链接器应该可以支持31个字符的外部标识符(R)
12.不同域名空间的标识符的名称应该具有不同的拼写,结构体成员除外(A)

2.2. 类型

13.基本的类型,char,int,short,long,double,和float不应该被使用。应该使用编译器通过typedef定义的等价规定长度类型的名称(A)
14.char类型应该声明成unsigned char 或者是signed char(R)
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; /*可以*/
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: