0

我有这个定义:

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

4

1 回答 1

2

有两种可能的原因:

  • 要么你的 MISRA 检查器坏了。我用 LDRA Testbed 测试了你的代码,它没有产生任何错误。
  • 或者我认为 NUM_UNITS 可能与传递给数组的指针数量不匹配。我不清楚这是否违反了 MISRA 规则。sizeof(STRING_ARRAY)/sizeof(const char*)您可以添加一个==的静态断言,NUM_UNITS无论 MISRA 是什么,这是一个很好的做法。
于 2013-03-01T14:30:57.627 回答