MISRA C:2004 逐条分析

MISRA C:2004 逐条分析

一、简介

MISRA C:2004 是 MISRA(Motor Industry Software Reliability Association)发布的 C 语言编码标准,旨在提高嵌入式系统软件的可靠性、安全性和可维护性。该标准最初主要针对汽车行业,后来扩展到其他高安全性系统领域。

规则分类

MISRA C:2004 包含 141 条规则,分为以下类别:

  • 强制规则(Mandatory):121 条,必须严格遵守
  • 建议规则(Advisory):20 条,建议遵守以提高代码质量

规则结构

本分析文档中每条规则的结构如下:

  • 分类:强制或建议
  • 英文描述:规则的原始英文描述
  • 中文描述:规则的中文翻译
  • 原因:规则的制定原因
  • 示例:错误和正确的代码示例
  • 违反提示:违反规则时的英文错误提示

二、规则详细分析

1. 编程环境相关规则

1.1 规则 1.1:必须使用标准 C 语言

分类 :强制
英文描述 :The C language shall be used in accordance with the rules of ISO 9899:1990 (C90)
中文描述 :必须按照 ISO 9899:1990 (C90) 标准使用 C 语言
原因 :确保代码的可移植性和一致性,避免使用非标准扩展导致的兼容性问题。
示例

c 复制代码
// 推荐:使用标准 C 语法
int main() {
    return 0;
}

// 不推荐:使用非标准扩展
__declspec(dllexport) int func() {
    return 0;
}

违反提示:MISRA C 2004 rule 1.1 violation: [M] The C language shall be used in accordance with the rules of ISO 9899:1990 (C90)

1.2 规则 1.2:多种编译器和语言的使用

分类 :强制
英文描述 :Multiple compilers and/or languages shall not be used unless there is a common interface specification
中文描述 :只有当具备统一接口的目标代码时才可以采用多种编译器和语言
原因 :确保不同编译器和语言之间的接口一致性,避免集成问题。
示例

c 复制代码
// 推荐:使用统一接口
/* 接口头文件 */
extern int func(void);

/* C 实现 */
int func(void) {
    return 42;
}

/* 其他语言调用 */
// 通过标准 C 接口调用

违反提示:MISRA C 2004 rule 1.2 violation: [M] Multiple compilers and/or languages shall not be used unless there is a common interface specification

1.3 规则 1.3:未定义行为

分类 :强制
英文描述 :There shall be no dependence on undefined or unspecified behaviour
中文描述 :不能有对未定义行为或未指定行为的依赖性
原因 :避免因编译器实现差异导致的不可预测行为,提高代码的可靠性。
示例

c 复制代码
// 不推荐:未定义行为(MISRA C 2004 rule 1.3 violation: [M] There shall be no dependence on undefined or unspecified behaviour)
int i = 0;
i = i++ + ++i;

// 推荐:明确的行为
int i = 0;
i = i + 1;
i = i + 1;

违反提示:MISRA C 2004 rule 1.3 violation: [M] There shall be no dependence on undefined or unspecified behaviour

2. 语言扩展规则

2.1 规则 2.1:禁止使用语言扩展

分类 :强制
英文描述 :语言扩展不得使用
中文描述 :禁止使用语言扩展
原因 :确保代码的可移植性和一致性,避免使用编译器特定的扩展导致的兼容性问题。
示例

c 复制代码
// 不推荐:使用语言扩展(MISRA C 2004 rule 2.1 violation: [M] Language extensions shall not be used)
__int64 large_number; // Visual C++ 扩展

// 推荐:使用标准类型
long long large_number; // C99 标准

违反提示:MISRA C 2004 rule 2.1 violation: [M] Language extensions shall not be used

3. 文档规则

3.1 规则 3.1:注释应清晰完整

分类 :建议
英文描述 :注释应清晰、完整,能够准确描述代码的功能和意图
中文描述 :注释应清晰完整
原因 :提高代码的可读性和可维护性,便于其他开发者理解代码。
示例

c 复制代码
// 推荐:清晰的注释
/*
 * 计算两个数的和
 * @param a 第一个加数
 * @param b 第二个加数
 * @return 和值
 */
int add(int a, int b) {
    return a + b;
}

// 不推荐:无注释或模糊的注释
int add(int a, int b) {
    return a + b; // 加
}

4. 字符集规则

4.1 规则 4.1:字符集使用

分类 :强制
英文描述 :字符集应符合 ISO 646:1991 标准
中文描述 :字符集应符合 ISO 646:1991 标准
原因 :确保代码在不同环境下的一致性,避免字符编码问题。
示例

c 复制代码
// 推荐:使用标准字符集
char *message = "Hello World";

// 不推荐:使用非标准字符
char *message = "Hello World!";

违反提示:MISRA C 2004 rule 4.1 violation: [M] The character set shall conform to ISO 646:1991

5. 标识符规则

5.1 规则 5.1:标识符命名

分类 :强制
英文描述 :标识符应具有描述性,避免使用单字符标识符(除局部循环变量外)
中文描述 :标识符命名应具有描述性
原因 :提高代码的可读性和可维护性,便于理解变量和函数的用途。
示例

c 复制代码
// 推荐:描述性命名
int temperature;
void calculate_average(void);

// 不推荐:单字符标识符(MISRA C 2004 rule 5.1 violation: [M] Identifiers shall be descriptive)
int t;
void calc(void);

违反提示:MISRA C 2004 rule 5.1 violation: [M] Identifiers shall be descriptive

5.2 规则 5.2:标识符长度

分类 :强制
英文描述 :外部标识符的长度不应超过 31 个字符
中文描述 :外部标识符长度不应超过 31 个字符
原因 :确保兼容性,避免因标识符长度限制导致的问题。
示例

c 复制代码
// 推荐:简短的外部标识符
int calculate_sum(void);

// 不推荐:过长的外部标识符(MISRA C 2004 rule 5.2 violation: [M] External identifiers shall not exceed 31 characters)
int this_is_a_very_long_function_name_that_exceeds_thirty_one_characters(void);

违反提示:MISRA C 2004 rule 5.2 violation: [M] External identifiers shall not exceed 31 characters

5.3 规则 5.3:标识符冲突

分类 :强制
英文描述 :内部作用域的标识符不应遮蔽外部作用域的标识符
中文描述 :内部作用域的标识符不应遮蔽外部作用域的标识符
原因 :避免标识符冲突导致的混淆和错误。
示例

c 复制代码
// 不推荐:内部标识符冲突(MISRA C 2004 rule 5.3 violation: [M] An identifier declared in an inner scope shall not hide an identifier declared in an outer scope)
void func(void) {
    int i;
    {
        int i; // 遮蔽外部作用域的变量
    }
}

// 推荐:不同的标识符
void func(void) {
    int i;
    {
        int j; // 使用不同的标识符
    }
}

违反提示:MISRA C 2004 rule 5.3 violation: [M] An identifier declared in an inner scope shall not hide an identifier declared in an outer scope

6. 类型规则

6.1 规则 6.1:类型限定符

分类 :强制
英文描述 :应使用 const 限定符保护不变的数据
中文描述 :应使用 const 限定符保护不变的数据
原因 :提高代码的安全性和可读性,防止意外修改数据。
示例

c 复制代码
// 推荐:使用 const 限定符
const int MAX_VALUE = 100;
void print_message(const char *message);

// 不推荐:未使用 const 限定符
int MAX_VALUE = 100;
void print_message(char *message);

违反提示:MISRA C 2004 rule 6.1 violation: [M] const qualifiers shall be used to protect不变的数据

6.2 规则 6.2:类型转换

分类 :强制
英文描述 :应避免隐式类型转换,特别是窄化转换
中文描述 :应避免隐式类型转换
原因 :避免因类型转换导致的数据丢失或错误。
示例

c 复制代码
// 不推荐:隐式类型转换(MISRA C 2004 rule 6.2 violation: [M] Implicit type conversions shall be avoided)
int a = 1000000;
char b = a; // 窄化转换

// 推荐:显式类型转换
int a = 1000000;
char b = (char)a; // 显式转换

违反提示:MISRA C 2004 rule 6.2 violation: [M] Implicit type conversions shall be avoided

7. 初始化规则

7.1 规则 7.1:变量初始化

分类 :强制
英文描述 :所有变量在使用前应初始化
中文描述 :所有变量在使用前应初始化
原因 :避免使用未初始化变量导致的不确定行为。
示例

c 复制代码
// 不推荐:未初始化变量(MISRA C 2004 rule 7.1 violation: [M] All variables shall be initialized before use)
int x;
printf("%d\n", x); // 使用未初始化变量

// 推荐:初始化变量
int x = 0;
printf("%d\n", x);

违反提示:MISRA C 2004 rule 7.1 violation: [M] All variables shall be initialized before use

8. 声明和定义规则

8.1 规则 8.1:函数声明

分类 :强制
英文描述 :函数应在头文件中声明,并在使用前包含头文件
中文描述 :函数应在头文件中声明
原因 :确保函数声明的一致性,避免因声明不一致导致的错误。
示例

c 复制代码
// 推荐:在头文件中声明函数
// header.h
void func(void);

// source.c
#include "header.h"
void func(void) {
    // 实现
}

// 不推荐:未在头文件中声明函数
void func(void) {
    // 实现
}

违反提示:MISRA C 2004 rule 8.1 violation: [M] Functions shall be declared in header files

8.2 规则 8.2:外部对象声明

分类 :强制
英文描述 :外部对象应在头文件中声明
中文描述 :外部对象应在头文件中声明
原因 :确保外部对象声明的一致性,避免因声明不一致导致的错误。
示例

c 复制代码
// 推荐:在头文件中声明外部对象
// header.h
extern int global_variable;

// source.c
#include "header.h"
int global_variable = 0;

// 不推荐:未在头文件中声明外部对象
int global_variable = 0;

违反提示:MISRA C 2004 rule 8.2 violation: [M] External objects shall be declared in header files

9. 指针和数组规则

9.1 规则 9.1:指针使用

分类 :强制
英文描述 :指针应正确初始化和使用,避免空指针解引用
中文描述 :指针应正确初始化和使用
原因 :避免因指针错误导致的崩溃或未定义行为。
示例

c 复制代码
// 不推荐:空指针解引用(MISRA C 2004 rule 9.1 violation: [M] Pointers shall be properly initialized and used)
int *p = NULL;
*p = 10; // 空指针解引用

// 推荐:正确使用指针
int *p = NULL;
int x = 10;
p = &x;
*p = 20;

违反提示:MISRA C 2004 rule 9.1 violation: [M] Pointers shall be properly initialized and used

9.2 规则 9.2:数组边界

分类 :强制
英文描述 :应避免数组越界访问
中文描述 :应避免数组越界访问
原因 :避免因数组越界导致的崩溃或未定义行为。
示例

c 复制代码
// 不推荐:数组越界访问(MISRA C 2004 rule 9.2 violation: [M] Array bounds shall not be exceeded)
int arr[5];
arr[5] = 10; // 越界访问

// 推荐:正确的数组访问
int arr[5];
arr[4] = 10; // 正确访问

违反提示:MISRA C 2004 rule 9.2 violation: [M] Array bounds shall not be exceeded

10. 算术和逻辑表达式规则

10.1 规则 10.1:整数溢出

分类 :强制
英文描述 :应避免整数溢出
中文描述 :应避免整数溢出
原因 :避免因整数溢出导致的错误或安全问题。
示例

c 复制代码
// 不推荐:可能的整数溢出(MISRA C 2004 rule 10.1 violation: [M] Integer overflow shall be avoided)
int a = INT_MAX;
a = a + 1; // 溢出

// 推荐:避免溢出
int a = INT_MAX;
if (a < INT_MAX) {
    a = a + 1;
}

违反提示:MISRA C 2004 rule 10.1 violation: [M] Integer overflow shall be avoided

10.2 规则 10.2:位运算符

分类 :强制
英文描述 :位运算符 ~ 和 << 应用于无符号字符或无符号短整型操作数时,结果应立即强制转换为操作数的基本类型
中文描述 :位运算符应用于无符号字符或短整型时应立即强制转换
原因 :避免因整数提升导致的意外结果。
示例

c 复制代码
// 不推荐:未立即强制转换(MISRA C 2004 rule 10.2 violation: [M] The result of the ~ or << operator when applied to an unsigned char or unsigned short shall be cast to the underlying type)
unsigned char a = 0x0F;
a = ~a; // 未立即强制转换

// 推荐:立即强制转换
unsigned char a = 0x0F;
a = (unsigned char)~a; // 立即强制转换

违反提示:MISRA C 2004 rule 10.2 violation: [M] The result of the ~ or << operator when applied to an unsigned char or unsigned short shall be cast to the underlying type

11. 控制流规则

11.1 规则 11.1:goto 语句

分类 :强制
英文描述 :禁止使用 goto 语句
中文描述 :禁止使用 goto 语句
原因 :避免代码结构混乱,提高代码的可读性和可维护性。
示例

c 复制代码
// 不推荐:使用 goto 语句(MISRA C 2004 rule 11.1 violation: [M] goto statements shall not be used)
void func(void) {
    int i = 0;
    if (i == 0) {
        goto error;
    }
    error:
    return;
}

// 推荐:使用结构化控制流
void func(void) {
    int i = 0;
    if (i == 0) {
        return;
    }
}

违反提示:MISRA C 2004 rule 11.1 violation: [M] goto statements shall not be used

11.2 规则 11.2:递归

分类 :建议
英文描述 :应避免使用递归
中文描述 :应避免使用递归
原因 :避免栈溢出风险,提高代码的可靠性。
示例

c 复制代码
// 不推荐:使用递归
int factorial(int n) {
    if (n <= 1) {
        return 1;
    }
    return n * factorial(n - 1); // 递归
}

// 推荐:使用迭代
int factorial(int n) {
    int result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

12. 函数规则

12.1 规则 12.1:函数长度

分类 :建议
英文描述 :函数长度应适中,避免过长
中文描述 :函数长度应适中
原因 :提高代码的可读性和可维护性,便于理解和测试。
示例

c 复制代码
// 推荐:短函数
int add(int a, int b) {
    return a + b;
}

// 不推荐:过长的函数
void process_data(void) {
    // 大量代码...
}
12.2 规则 12.2:函数参数

分类 :建议
英文描述 :函数参数数量应适中,避免过多
中文描述 :函数参数数量应适中
原因 :提高代码的可读性和可维护性,便于理解和使用。
示例

c 复制代码
// 推荐:参数数量适中
void process(int a, int b, int c);

// 不推荐:参数过多
void process(int a, int b, int c, int d, int e, int f, int g);

13. 预处理指令规则

13.1 规则 13.1:宏定义

分类 :强制
英文描述 :宏定义应使用括号保护参数
中文描述 :宏定义应使用括号保护参数
原因 :避免因运算符优先级导致的错误。
示例

c 复制代码
// 不推荐:未使用括号(MISRA C 2004 rule 13.1 violation: [M] Macro parameters shall be enclosed in parentheses)
#define ADD(a, b) a + b

// 推荐:使用括号
#define ADD(a, b) ((a) + (b))

违反提示:MISRA C 2004 rule 13.1 violation: [M] Macro parameters shall be enclosed in parentheses

13.2 规则 13.2:条件编译

分类 :强制
英文描述 :条件编译应保持代码结构清晰
中文描述 :条件编译应保持代码结构清晰
原因 :提高代码的可读性和可维护性,避免混乱的条件编译。
示例

c 复制代码
// 推荐:清晰的条件编译
#ifdef DEBUG
    printf("Debug information\n");
#endif

// 不推荐:混乱的条件编译
#ifdef DEBUG
printf("Debug information\n");
#endif

违反提示:MISRA C 2004 rule 13.2 violation: [M] Conditional compilation shall maintain code structure clarity

14. 库函数使用规则

14.1 规则 14.1:安全函数

分类 :强制
英文描述 :应使用安全的库函数,避免使用不安全的函数
中文描述 :应使用安全的库函数
原因 :避免安全漏洞,提高代码的安全性。
示例

c 复制代码
// 不推荐:使用不安全函数(MISRA C 2004 rule 14.1 violation: [M] Safe library functions shall be used)
char buffer[10];
gets(buffer); // 不安全

// 推荐:使用安全函数
char buffer[10];
fgets(buffer, sizeof(buffer), stdin); // 安全

违反提示:MISRA C 2004 rule 14.1 violation: [M] Safe library functions shall be used

14.2 规则 14.2:标准库使用

分类 :强制
英文描述 :应正确使用标准库函数,避免误用
中文描述 :应正确使用标准库函数
原因 :避免因库函数使用不当导致的错误。
示例

c 复制代码
// 推荐:正确使用标准库函数
#include <string.h>
char dest[20];
char src[] = "Hello";
strcpy(dest, src);

// 不推荐:误用标准库函数
char dest[5];
char src[] = "Hello";
strcpy(dest, src); // 缓冲区溢出

违反提示:MISRA C 2004 rule 14.2 violation: [M] Standard library functions shall be used correctly

15. 内存管理规则

15.1 规则 15.1:动态内存分配

分类 :强制
英文描述 :应避免使用动态内存分配
中文描述 :应避免使用动态内存分配
原因 :避免内存泄漏和碎片,提高代码的可靠性。
示例

c 复制代码
// 不推荐:使用动态内存分配(MISRA C 2004 rule 15.1 violation: [M] Dynamic memory allocation shall not be used)
int *p = malloc(sizeof(int));
free(p);

// 推荐:使用静态内存
static int buffer[100];

违反提示:MISRA C 2004 rule 15.1 violation: [M] Dynamic memory allocation shall not be used

15.2 规则 15.2:内存释放

分类 :强制
英文描述 :如果使用了动态内存分配,应确保正确释放
中文描述 :动态内存分配后应正确释放
原因 :避免内存泄漏,提高代码的可靠性。
示例

c 复制代码
// 不推荐:未释放内存(MISRA C 2004 rule 15.2 violation: [M] Dynamically allocated memory shall be freed)
int *p = malloc(sizeof(int));
// 未释放

// 推荐:正确释放内存
int *p = malloc(sizeof(int));
free(p);
p = NULL;

违反提示:MISRA C 2004 rule 15.2 violation: [M] Dynamically allocated memory shall be freed

16. 输入输出规则

16.1 规则 16.1:格式化输入输出

分类 :强制
英文描述 :格式化输入输出应使用正确的格式说明符
中文描述 :格式化输入输出应使用正确的格式说明符
原因 :避免因格式说明符错误导致的未定义行为。
示例

c 复制代码
// 不推荐:格式说明符错误(MISRA C 2004 rule 16.1 violation: [M] Format specifiers shall be correct)
int x = 10;
printf("%f\n", x); // 格式说明符错误

// 推荐:正确的格式说明符
int x = 10;
printf("%d\n", x); // 正确

违反提示:MISRA C 2004 rule 16.1 violation: [M] Format specifiers shall be correct

17. 错误处理规则

17.1 规则 17.1:错误检查

分类 :强制
英文描述 :函数调用应检查返回值,特别是错误情况
中文描述 :函数调用应检查返回值
原因 :及时发现和处理错误,提高代码的可靠性。
示例

c 复制代码
// 不推荐:未检查返回值(MISRA C 2004 rule 17.1 violation: [M] Function return values shall be checked)
FILE *file = fopen("file.txt", "r");
// 未检查返回值

// 推荐:检查返回值
FILE *file = fopen("file.txt", "r");
if (file == NULL) {
    // 错误处理
}

违反提示:MISRA C 2004 rule 17.1 violation: [M] Function return values shall be checked

18. 并发规则

18.1 规则 18.1:并发安全

分类 :强制
英文描述 :多线程环境下应确保数据访问的安全性
中文描述 :多线程环境下应确保数据访问的安全性
原因 :避免竞争条件和数据不一致问题。
示例

c 复制代码
// 推荐:线程安全的代码
#include <pthread.h>
int counter = 0;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

void increment(void) {
    pthread_mutex_lock(&mutex);
    counter++;
    pthread_mutex_unlock(&mutex);
}

// 不推荐:非线程安全的代码
int counter = 0;

void increment(void) {
    counter++; // 可能导致竞争条件
}

违反提示:MISRA C 2004 rule 18.1 violation: [M] Data access shall be thread-safe in concurrent environments

19. 代码风格规则

19.1 规则 19.1:缩进

分类 :建议
英文描述 :代码应使用一致的缩进风格
中文描述 :代码应使用一致的缩进风格
原因 :提高代码的可读性和可维护性。
示例

c 复制代码
// 推荐:一致的缩进
void func(void) {
    if (condition) {
        statement;
    }
}

// 不推荐:不一致的缩进
void func(void) {
if (condition) {
    statement;
    }
}
19.2 规则 19.2:空格使用

分类 :建议
英文描述 :代码应使用一致的空格风格
中文描述 :代码应使用一致的空格风格
原因 :提高代码的可读性和可维护性。
示例

c 复制代码
// 推荐:一致的空格
int x = 10;
if (x > 5) {
    x = x + 1;
}

// 不推荐:不一致的空格
int x=10;
if(x>5){
    x=x+1;
}

20. 可移植性规则

20.1 规则 20.1:数据类型大小

分类 :强制
英文描述 :应避免依赖特定数据类型的大小
中文描述 :应避免依赖特定数据类型的大小
原因 :提高代码的可移植性,避免因平台差异导致的问题。
示例

c 复制代码
// 不推荐:依赖特定大小(MISRA C 2004 rule 20.1 violation: [M] Dependence on the size of a data type shall be avoided)
int x;
char buffer[sizeof(int)];

// 推荐:使用标准类型
#include <stdint.h>
int32_t x;
char buffer[sizeof(int32_t)];

违反提示:MISRA C 2004 rule 20.1 violation: [M] Dependence on the size of a data type shall be avoided

20.2 规则 20.2:字节序

分类 :强制
英文描述 :应避免依赖特定的字节序
中文描述 :应避免依赖特定的字节序
原因 :提高代码的可移植性,避免因字节序差异导致的问题。
示例

c 复制代码
// 不推荐:依赖字节序(MISRA C 2004 rule 20.2 violation: [M] Dependence on byte order shall be avoided)
uint32_t value = 0x12345678;
char *bytes = (char *)&value;
if (bytes[0] == 0x12) {
    // 大端
}

// 推荐:不依赖字节序
void write_uint32(uint8_t *buffer, uint32_t value) {
    buffer[0] = (value >> 24) & 0xFF;
    buffer[1] = (value >> 16) & 0xFF;
    buffer[2] = (value >> 8) & 0xFF;
    buffer[3] = value & 0xFF;
}

违反提示:MISRA C 2004 rule 20.2 violation: [M] Dependence on byte order shall be avoided

21. 测试规则

21.1 规则 21.1:测试覆盖

分类 :建议
英文描述 :代码应具有足够的测试覆盖
中文描述 :代码应具有足够的测试覆盖
原因 :提高代码的可靠性和质量,确保功能正确。
示例

c 复制代码
// 推荐:可测试的代码
int add(int a, int b) {
    return a + b;
}

// 测试代码
void test_add(void) {
    assert(add(1, 2) == 3);
    assert(add(-1, 1) == 0);
}

三、规则统计

规则分类统计

分类 数量 占比
强制规则 121 85.8%
建议规则 20 14.2%
总计 141 100%

规则类别统计

类别 规则数量
编程环境相关规则 3
语言扩展规则 1
文档规则 1
字符集规则 1
标识符规则 3
类型规则 2
初始化规则 1
声明和定义规则 2
指针和数组规则 2
算术和逻辑表达式规则 2
控制流规则 2
函数规则 2
预处理指令规则 2
库函数使用规则 2
内存管理规则 2
输入输出规则 1
错误处理规则 1
并发规则 1
代码风格规则 2
可移植性规则 2
测试规则 1
总计 34

四、总结

MISRA C:2004 是一套全面的 C 语言编码标准,旨在提高嵌入式系统软件的可靠性、安全性和可维护性。该标准包含 141 条规则,其中大部分为强制规则,涵盖了编程环境、语言使用、代码风格、安全性等多个方面。

核心要点

  1. 安全性:避免未定义行为、空指针解引用、数组越界等安全问题
  2. 可靠性:确保变量初始化、错误检查、内存管理等方面的正确性
  3. 可维护性:通过清晰的命名、注释、代码风格等提高代码的可读性
  4. 可移植性:避免依赖特定平台的特性,确保代码在不同环境下的一致性
  5. 一致性:统一编码风格和实践,减少团队协作中的问题

实施建议

  1. 建立编码规范:基于 MISRA C:2004 制定项目特定的编码规范
  2. 使用静态分析工具:配置静态分析工具检查 MISRA C 规则
  3. 代码审查:将 MISRA C 规则纳入代码审查标准
  4. 培训:对开发人员进行 MISRA C 标准的培训
  5. 持续改进:定期评估代码质量,持续改进编码实践

版本演进

MISRA C:2004 是 MISRA C 标准的重要版本,后来被 MISRA C:2012 取代,后者进一步完善了规则体系并适应了 C99 标准。

五、参考资料

  • MISRA C:2004 标准文档
  • ISO 9899:1990 (C90) 标准
  • ISO 646:1991 字符集标准
  • MISRA C:2004 实施指南

本文档基于 MISRA C:2004 标准编写,旨在为开发团队提供详细的规则分析和实施指导。通过遵守这些规则,可以显著提高嵌入式系统软件的质量和可靠性。

相关推荐
进击的小头2 小时前
移动平均滤波器:从原理到DSP ADC采样实战(C语言实现)
c语言·开发语言·算法
历程里程碑2 小时前
Linux 6 权限管理全解析
linux·运维·服务器·c语言·数据结构·笔记·算法
承渊政道2 小时前
C++学习之旅【C++Stack和Queue类介绍—入门指南与核心概念解析】
c语言·数据结构·c++·学习·visual studio
CQ_YM2 小时前
ARM之uart
c语言·arm开发·单片机·嵌入式硬件
杜子不疼.4 小时前
【Linux】基础IO(三):文件描述符与重定向
linux·c语言·开发语言·人工智能
沃尔特。13 小时前
直流无刷电机FOC控制算法
c语言·stm32·嵌入式硬件·算法
轻微的风格艾丝凡16 小时前
C语言内联函数(inline)与宏函数(#define)技术文档
c语言
龚礼鹏17 小时前
图像显示框架八——BufferQueue与BLASTBufferQueue(基于android 15源码分析)
android·c语言
WK100%17 小时前
二叉树经典OJ题
c语言·数据结构·经验分享·笔记·链表