Как решить MISRA C: 2012 Правило: 8.4? - PullRequest
0 голосов
/ 10 января 2019

У меня есть код C, который я пытаюсь сделать таким, чтобы он соответствовал требованиям MISRA. Я получаю следующую ошибку в двух разных случаях:

Случай 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];

1 Ответ

0 голосов
/ 10 января 2019

Как мне определить его по-другому, чтобы оно соответствовало правилу MISRA?

Если массив предназначен для доступа к коду из нескольких разных файлов , поместите объявление этого в header.h:

extern uint32_t buf[BUF_SIZE];

Не опускайте extern. Не опускайте размер массива, хотя стандартный C допускает это. Сохраните определение, уже присутствующее в файле .c, без изменений.

Если массив предназначен для использования только в файле, в котором он объявлен , то сделайте его статическим:

static uint32_t buf[BUF_SIZE];

Не объявляйте это в любом заголовке в этом случае.

...