c - 如何解决 MISRA C :2012 Rule:8. 4?

标签 c embedded misra

我有一个 C 代码,我正在尝试使其符合 MISRA 合规性。我在两种不同的情况下收到以下错误:

案例 1]note 9075:在未事先声明的情况下定义外部符号“buf”[MISRA 2012 规则 8.4,必需] uint32_t buf[BUF_SIZE](在 main.c 中);

我如何以另一种方式定义它,以便它遵循 MISRA 规则?

案例 2] note 9075:在未事先声明的情况下定义外部符号“buf”[MISRA 2012 规则 8.4,必需] uint32_t buf[64U];

case1:
header.h
#define BUF_SIZE 64U
test.c
#include "header.h"
uint32_t buf[BUF_SIZE];

case2:
test.c
uint32_t buf[64U];

最佳答案

How can I define it an another way so it will follow MISRA rule ?

如果该数组要由多个不同文件中的代码访问,则将其声明放入 header.h 中:

extern uint32_t buf[BUF_SIZE];

不要省略extern。不要省略数组大小,尽管标准 C 允许这样做。保持 .c 文件中已有的定义不被修改。

如果数组仅在声明它的文件中使用,则将其设为静态:

static uint32_t buf[BUF_SIZE];

在这种情况下,请勿在任何 header 中声明它。

关于c - 如何解决 MISRA C :2012 Rule:8. 4?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54118906/

相关文章:

c - 微 Controller 编程中ISR函数中 volatile 关键字的使用

c - 计算函数返回值的最佳实践

C:通过 argv[] 将文件名加载到结构中,但我不想要文件类型(例如 .txt)?

c - 从多个库动态加载时静态存储持续时间对象的唯一性保证

python - libavg 自定义事件处理程序

c - 使用 Msp430fr5969 通过 Tx 发送字符串

c - 指向字节数组的指针

c++ - 在 MISRA C++ 2008 中,有人知道规则 5-0-3 中出现的特殊概念 Cvalue 表达式吗?

c - SDL 2 在轮询事件时挂起

c - 错误: expected statement before ‘)’ token in C macro