在一个语句中不应声明多个对象或函数
6.10.3 ID_tooManyDeclarators
在一个语句中声明多个对象或函数不利于阅读和维护,建议在一个语句中只声明一个对象或函数。
函数、数组以及相关指针、引用的声明相对复杂,不应和其他声明混在一起。为了便于查阅,对于类及结构体成员、全局对象、具有外部链接性或静态存储期的对象,也不应将多项声明混在一个语句中。对于简单的局部对象声明可适当放宽要求,但仍以一个语句一项声明为宜。
不应将指针、引用、数组、函数等不同类别的声明混在一个语句中,对此本规则特化为 ID_mixedDeclarations。
示例:
int a, b, c, d, e, f, g, ....; // Non-compliant, too many objects
int fn1(void), fn2(int, int*), fn3(int); // Non-compliant
struct T {
int i, j, k; // Non-compliant
};
例中一个语句声明多个函数、成员或全局对象是不符合要求的。
又如:
void foo() {
int long_name, name; // Non-compliant
int u = complex_expression, v; // Non-compliant
....
int x, y; // Simple declarations, let it go?
....
}
对于局部对象,审计工具不妨统计声明项及其初始化表达式的字符个数,如果超过指定限制,则判其应在单独的语句中声明。
配置
maxLocalDeclaratorCount: 局部作用域中一个语句能声明的对象个数上限,超过则报出
maxMemberDeclaratorCount: 类或结构体中一个语句能声明的对象个数上限,超过则报出
maxGlobalDeclaratorCount: 全局及命名空间作用域中一个语句能声明的对象个数上限,超过则报出
simpleDeclaratorLengthThreshold: 声明字符数量阈值,超过此值则判其应在单独的语句中声明
相关
参考
C++ Core Guidelines ES.10
MISRA C++ 2008 8-0-1