Правило MISRA-C 11.2: преобразование из массива в указатель - PullRequest
1 голос
/ 31 мая 2019

У меня есть две структуры:

typedef struct {
    uint8 valid;
    uint8 identifier[20];
    uint8 parentIdentifier[20];
    /* etc */
} CustomData;

#define max_data_size 10
typedef struct {
    CustomData data[max_data_size];
    uint32 numberOfUsedData;
    /* etc. */
} MyContext;

и функция с подписью

uint8 parentInList(CustomData *data, 
                   const CustomData* const list,
                   uint32 length);

Я пытаюсь вызвать мою функцию следующим образом:

MyContext ctx = /* some proper initialization */;
result = parentInList(&ctx.data[0], ctx.data, ctx.numberOfUsedData);

Мой статический анализ говорит о том, что ctx.data является правилом нарушения правил 11.2 MisraC:
«Преобразования не должны выполняться между указателем на неполный тип и любым другим типом»

Однако я не могупосмотрим, как это неправильно.Массивы не являются неполным типом, если они имеют фиксированный размер, верно?
Это мой статический анализатор выдает ложное срабатывание из-за макроса?Или я ошибся и как бы исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...