米斯拉警告包括守卫
Misra warning for include guard
这是关于MISRA c++ 2008指南中的MISRA规则16-0-2
Macros shall only be #define'd or #undef'd in the global namespace.
我理解这个规则,但是我的polyspace misra检查工具抱怨以下包括在文件开头声明为不兼容的保护。我想,如果这个文件本身包含在另一个名称空间中,可能会发生这种情况,但我的头文件不是这种情况。
代码中还有哪些错误可能导致这个问题?
#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
如果这些标题保护符被放在任何大括号之外(在全局命名空间中),那么您的代码是好的,您的工具是坏的。向Polyspace发送bug报告
这条规则背后的基本原理是预处理指令不应该放在大括号内(在命名空间声明或函数等中),因为它们的作用域总是全局的,无论它们放在哪里。
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 为什么 cmake 许可证<>样式不包括?
- 计算平均值,不包括上次得分
- 从多个源构造一个对象,包括一个对象向量
- 在编译中包括 Botan 2
- 将值从另一个数组写入数组,不包括不需要的值 C++
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- 包括C++头文件
- CPP 包括 Azure DevOps 中的目录设置
- 包括STL,而不会乱扔全球范围
- 如何反转我的输入,包括否定
- 包括没有完整路径的我的库
- 如何在 android ndk 上链接 C 和 C++ 代码,以及 C 和 C++ 运行时库(包括 STL)?
- C++包括类名间距和类实例化
- 链接错误,包括我创建的相同头文件 - C++
- 标头,包括在 Swift 项目中使用C++文件时的错误
- 如果语句不包括文本行?
- 米斯拉警告包括守卫
- C包括守卫