Misra警告包括警卫

时间:2016-11-10 10:55:05

标签: c++ misra

这是关于MISRA C ++ 2008指南中的MISRA规则16-0-2

Macros shall only be #define'd or #undef'd in the global namespace.

我理解这条规则,但是我的polyspace misra检查工具抱怨说,在文件开头声明的包含guard作为Non-Compliant。我想如果这个文件本身包含在另一个命名空间中会发生这种情况,但我的头文件不是这种情况。

代码中的其他哪些错误可能会导致此问题?

#ifndef FOO_H
#define FOO_H

... code etc ...

#endif

注意: Misra指南中引用的示例是

#ifndef MY_HDR
#define MY_HDR     // Compliant


namespace NS
{
    #define FOO   // Non- Compliant
    #undef FOO    // Non-Compliant
}
#endif

1 个答案:

答案 0 :(得分:1)

如果这些标题保护放在任何大括号之外(在全局命名空间中),那么您的代码就可以了,您的工具就会被破坏。向Polyspace发送错误报告。

此规则背后的基本原理是,预处理器指令不应放在大括号内(命名空间声明或函数内部等),因为它们的范围始终是全局的,无论它们放在何处。