'='应初始化所有枚举成员或仅初始化第一个枚举成员;
'=' should initialize either all enum members or only the first;
我正在尝试使用以下枚举值构建我的代码:
typedef enum {
YUV_420P=0,
YUV_422P,
RGB_P,
BAYER_P,
YUV_422IBE,
YUV_444IBE,
A_1BIT,
YUV_420SP,
COMPLEX_8BIT,
COMPLEX_16BIT,
COMPLEX_32BIT,
COMPLEX_U8BIT,
COMPLEX_U16BIT,
COMPLEX_U32BIT,
ALPHA_TYPE=0x8000
} Format;
但是在构建过程中,我收到以下故障警告..
sample.h: Note 960: Violates MISRA 2004 Required Rule 9.3, '=' should initialize either all enum members or only the first; enumerator: 'ALPHA_TYPE' ..
我不想更改ALPHA_TYPE的值,我只想将ALPHA_TYPE放在这个枚举中。我该如何解决这个问题?
你的代码已经做了你想要的。您只需要禁止显示此特定警告。
另一方面,如果您确实需要遵守 MISRA 2004 规则 9.3,那么您将需要更改代码并找到不同的解决方案。但你不能同时拥有它。
如果其他枚举的值无关紧要,你可以这样做
typedef enum {
ALPHA_TYPE=0x8000,
YUV_420P,
YUV_422P,
RGB_P,
BAYER_P,
YUV_422IBE,
YUV_444IBE,
1BIT,
YUV_420SP,
COMPLEX_8BIT,
COMPLEX_16BIT,
COMPLEX_32BIT,
COMPLEX_U8BIT,
COMPLEX_U16BIT,
COMPLEX_U32BIT
} Format;
或
像这样定义所有枚举值(如果您添加新枚举值,这将避免更改其中一个枚举值)
typedef enum {
YUV_420P=0,
YUV_422P=1,
RGB_P=2,
BAYER_P=3,
YUV_422IBE=4,
YUV_444IBE=5,
1BIT=6,
YUV_420SP=7,
COMPLEX_8BIT=8,
COMPLEX_16BIT=9,
COMPLEX_32BIT=10,
COMPLEX_U8BIT=11,
COMPLEX_U16BIT=12,
COMPLEX_U32BIT=13,
ALPHA_TYPE=0x8000
} Format;
这
当然不是C++要求。
[C++11: 7.2/2]:
具有=
的枚举器定义为关联的枚举器提供常量表达式指示的值。如果第一个枚举器没有初始值设定项,则相应常量的值为零。不带初始值设定项的枚举器定义为枚举器提供通过增加前一个枚举器的值获得的值 由一个。
它上面的语法允许多个枚举器具有初始值设定项。
如果允许,也许您可以关闭是否符合此"MISRA 2004"规则的检查。您也可以简单地忽略它,因为它似乎只是一个Note
。就我个人而言,如果它一直出现,我会有点恼火,但也许这只是我。
和/或关闭 MISRA 规则检查。
和/或,忽略特定注释。显然,您可以通过+esym
选项来做到这一点。或者也许-esym
,只是尝试一下并检查文档。
相关文章:
- C++成员初始化
- c++构造函数成员初始化:传递参数
- 枚举成员与静态 int 成员?
- C++正确的指针成员初始化
- 将另一个类的对象传递到当前类C++的构造函数中(不是成员初始化)
- WinLamb 错误:成员初始化非法
- 从类访问枚举成员
- 使用其他成员初始化结构的成员?
- C++模板类静态成员初始化
- 解释了构造函数成员初始化列表
- std::映射键作为模板化结构与枚举成员
- 大括号使用枚举类初始化静态常量unordered_map
- 枚举可以在成员初始化列表中初始化吗?
- '='应初始化所有枚举成员或仅初始化第一个枚举成员;
- 通过枚举重载模板化成员函数
- 枚举和初始化类
- 使用固定值枚举数的枚举零初始化
- 使用枚举成员模板化成员函数
- 使用咬运算符了解枚举成员的初始化
- 如何初始化具有枚举成员的结构