如何解决 MISRA C:2012 Rule:8.4?

How to resolve MISRA C:2012 Rule:8.4?

我有一个 C 代码,我正在尝试将其变为 MISRA Compliance.I 在两种不同的情况下出现以下错误:

案例 1]注 9075:外部符号 'buf' 在没有事先声明的情况下定义 [MISRA 2012 规则 8.4,要求] uint32_t buf[BUF_SIZE](在 main.c);

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

案例 2] 注释 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中声明它。