Определите массив с помощью команды #define, не соответствующей правилам misra

У меня есть это определение:

static const char* STRING_ARRAY[NUM_UNITS] = STRING_ARRAY_VALUES;

когда

#define STRING_ARRAY_VALUES                 \
{   "n/a",                                  \
"bool",                                   \
...                                       \
}

К сожалению, оно не соответствует правилу 8-5-2 MISRA-C ++:

"MISRA-C++ Rule 8-5-2 (required): Braces shall be used to indicate and match the
structure in the non-zero initialization of arrays and structures."

Может кто-нибудь объяснить мне, почему это не соответствует? Я думал, что команда #define превращает определение в что-то вроде:

static const char* STRING_ARRAY[NUM_UNITS] = {"n/a", "bool",...}

который соответствует правилам MISRA.

Есть ли способ сделать это, чтобы соответствовать требованиям MISRA при сохранении #define?

0

Решение

Есть две возможные причины:

  • Либо ваш MISRA контролер сломан. Я проверил ваш код на LDRA Testbed, и он не выдает никаких ошибок.
  • Или я полагаю, что NUM_UNITS, возможно, не соответствует количеству указателей, переданных в массив. Мне не ясно, является ли это нарушением правила MISRA или нет. Вы можете добавить статическое утверждение, что sizeof(STRING_ARRAY)/sizeof(const char*) == NUM_UNITS, что является хорошей практикой, независимо от MISRA.
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]