枚举初始化不一致¶
ID: cpp/irregular-enum-init
Kind: problem
Security severity:
Severity: recommendation
Precision: high
Tags:
- reliability
- readability
- language-features
- external/jsf
Query suites:
- cpp-security-and-quality.qls
此规则查找枚举成员初始化不一致的枚举。只有第一个枚举成员应该使用 ‘=’ 进行初始化,或者所有成员都应该进行初始化。枚举成员初始化不一致很容易导致缺陷,尤其是在添加或删除成员时,或者如果代码依赖于枚举成员的实际整数值时。
建议¶
更改枚举,使其只有第一个成员进行初始化,或者对所有枚举成员进行初始化。一般来说,如果您确实关心枚举成员的整数值,请对所有枚举成员进行初始化。否则,最好让编译器在编译时分配值。
示例¶
//wrong: inconsistent initialization, only the first should be initialized,
//or all should be initialized
enum {
VALUE_SHOULD_BE_10 = 10,
VALUE_SHOULD_BE_11,
VALUE_SHOULD_BE_12,
VALUE_SHOULD_BE_20, //newly added member, but initialization was forgotten
//(would have a value of 13 instead of 20).
VALUE_SHOULD_BE_30 = 30,
VALUE_SHOULD_BE_40 = 40
} bad_values;
//correct: all enum values initialized
enum {
VALUE_SHOULD_BE_10 = 10,
VALUE_SHOULD_BE_11 = 11,
VALUE_SHOULD_BE_12 = 12,
VALUE_SHOULD_BE_20 = 20, //newly added member, it is less likely to forget
//putting in initialization since everything else
//is initialized
VALUE_SHOULD_BE_30 = 30,
VALUE_SHOULD_BE_40 = 40
} good_values;
参考资料¶
AV Rule 145,联合攻击战斗机空车 C++ 编码标准。洛克希德·马丁公司,2005 年。
MISRA C++ Rule 8-5-3,关键系统中 C++ 语言使用指南。汽车软件可靠性协会,2008 年。
MSDN 库:枚举 (C++).