MISRA-C编码标准解读:Rule 5.1至Rule5.7【标识符】

规则 6.1(必须):纯char 类型仅应用于存储和使用字符值

规则 6.2(必须):signed charunsigned char 类型仅应用于存储和使用数值

存在三种不同的 char 类型:char(纯)、signed charunsigned charsigned charunsigned char 应用于数值数据,而 char(纯)类型应用于字符数据。

规则 6.3(建议):应使用指示大小和符号性的 typedef 替换基本数值类型

基本数值类型,包括 charintshortlong 的带符号和无符号变体以及 floatdouble,不应当被直接使用,而应当使用特定长度的 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;

规则 6.4(必须):位字段应当仅被定义为 unsigned intsigned int 类型

虽然位字段本身使用unsigned intsigned 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
};

规则 6.5(必须):带符号类型的位字段长度至少应当为2位

长度为1位的带符号位字段没有实际用途。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值