使用#define命令定义一个不符合misra规则的数组

时间:2013-02-28 15:01:41

标签: c++ arrays c-preprocessor misra

我有这个定义:

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

1 个答案:

答案 0 :(得分:2)

有两种可能的原因:

  • 你的MISRA检查器坏了。我用LDRA Testbed测试了你的代码,它没有产生任何错误。
  • 或者我认为NUM_UNITS可能与传递给数组的指针数不匹配。我不清楚这是否违反了MISRA规则。您可以添加sizeof(STRING_ARRAY)/sizeof(const char*) == NUM_UNITS的静态断言,无论MISRA如何,这都是不错的做法。