MISRA-C编码标准解读:Rule 5.1至Rule5.7【标识符】
发布时间
阅读量:
阅读量
规则 6.1(必须):纯char 类型仅应用于存储和使用字符值
规则 6.2(必须):signed char 和 unsigned char 类型仅应用于存储和使用数值
包含三类不同类型的字符:纯字符类型、有符号字符类型和无符号字符类型。有符号字符类型和无符号字符类型用于数值数据表示;而纯字符类型的变量则仅用于存储字符数据
规则 6.3(建议):应使用指示大小和符号性的 typedef 替换基本数值类型
基本数据类型的数值表示涉及 char``int``short``long 的有符号与无符号变体以及 float``double. 不应直接应用这些原始数据类型 而应采用特定长度的 typedef.
对于 32 位整数机器,定义如下:
typedef char char_t;
typedef signed char int8_t;
typedef unsigned char uint8_t;
typedef signed short int16_t;
typedef unsigned short uint16_t;
typedef signed int int32_t;
typedef unsigned int uint32_t;
typedef signed long int64_t;
typedef unsigned long uint64_t;
typedef float float32_t;
typedef double float64_t;
typedef long double float128_t;
c

规则 6.4(必须):位字段应当仅被定义为 unsigned int 或 signed int 类型
尽管位字段本身采用\texttt{unsigned int}和\texttt{signed int}的方式能够有效规避由此引发的潜在问题。
/* 以下没有遵循MISRA-C标准 */
struct CharBitFields {
unsigned char flag1 : 1; // 1 bit
unsigned char flag2 : 2; // 2 bits
unsigned char value : 5; // 5 bits
};
/* 正确定义,注意该结构体占用32Bytes */
struct IntBitFields {
unsigned int flag1 : 1; // 1 bit
unsigned int flag2 : 2; // 2 bits
unsigned int value : 5; // 5 bits
};
c

规则 6.5(必须):带符号类型的位字段长度至少应当为2位
长度为1位的带符号位字段没有实际用途。
全部评论 (0)
还没有任何评论哟~
