我有这个定义:
static const char* STRING_ARRAY[NUM_UNITS] = STRING_ARRAY_VALUES;
当
#define STRING_ARRAY_VALUES \
{ "n/a", \
"bool", \
... \
}
不幸的是,它不符合MISRA-C ++规则8-5-2:
"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 :(得分:2)
有两种可能的原因:
sizeof(STRING_ARRAY)/sizeof(const char*)
== NUM_UNITS
的静态断言,无论MISRA如何,这都是不错的做法。