Advertisement

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

阅读量:

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

规则 6.2(必须):signed charunsigned 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
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-12/ejFVLWTJZ7XEDaf80cQGo2kOPYw4.png)

规则 6.4(必须):位字段应当仅被定义为 unsigned intsigned 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
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-12/G3A8ygb4iCvzdDBm2eVFMKIlQfTR.png)

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

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

全部评论 (0)

还没有任何评论哟~