首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用不符合misra规则的#define命令定义数组

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

Stack Overflow用户
提问于 2013-02-28 23:01:41
回答 1查看 337关注 0票数 0

我有这样的定义:

代码语言:javascript
复制
static const char* STRING_ARRAY[NUM_UNITS] = STRING_ARRAY_VALUES;

什么时候

代码语言:javascript
复制
#define STRING_ARRAY_VALUES                 \
{   "n/a",                                  \
  "bool",                                   \
  ...                                       \
}

不幸的是,它不符合MISRA-C++规则8-5-2:

代码语言:javascript
复制
"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命令会将定义转换为类似以下内容:

代码语言:javascript
复制
static const char* STRING_ARRAY[NUM_UNITS] = {"n/a", "bool",...}

这符合MISRA的规则。

有没有办法在保留#define的同时使其符合MISRA

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-01 22:30:58

有两种可能的原因:

  • 要么是你的MISRA检查器坏了。我用LDRA Testbed测试了你的代码,它没有产生错误。

  • ,或者我猜NUM_UNITS可能与传递给数组的指针数量不匹配。我不清楚这是否违反了MISRA规则。您可以添加一个静态断言sizeof(STRING_ARRAY)/sizeof(const char*) == NUM_UNITS,这是一个很好的做法,不管MISRA如何。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15138749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档