У меня есть это определение:
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
?
Есть две возможные причины:
sizeof(STRING_ARRAY)/sizeof(const char*)
== NUM_UNITS
, что является хорошей практикой, независимо от MISRA.Других решений пока нет …