全局名称不应被覆盖
6.1.5 ID_hideGlobal
局部、成员名称不应与全局或命名空间内的名称相同,否则干扰阅读,易引起误解。
示例:
extern int i;
void foo() {
int i = 0; // Non-compliant, hides the global ‘i’
....
}
class A {
int i; // Non-compliant, hides the global ‘i’
public:
int bar() {
return i; // Which ‘i’?
}
....
};
建议全局对象遵循统一的命名约定,如以“g_”开头,且名称长度不宜过短,可有效规避这类问题。
例外:
extern int i;
struct S {
int i; // Compliant
};
无成员函数的结构体或联合体成员可不受本规则限制。
参考
CWE-1109
MISRA C 2004 5.2
MISRA C 2012 5.3
MISRA C++ 2008 2-10-2