仅包含头文件¶
ID: cpp/include-non-header
Kind: problem
Security severity:
Severity: recommendation
Precision: high
Tags:
- maintainability
- modularity
- readability
- external/jsf
Query suites:
- cpp-security-and-quality.qls
此规则查找包含非头文件(*.h、*.hpp)的 #include
预处理器指令。例外情况是定义模板类或函数的头文件。这些头文件可以包含实现文件,这些实现文件随后被视为头文件的一部分。包含源文件可能会创建不必要的庞大目标文件,还会暴露整个实现,而不仅仅是其接口(尤其是在 C 中,因为 C 的作用域关键字集有限)。
这些规则的例外情况是包含模板定义的文件。这些文件可以包含 .c
和 .cpp
文件,这些文件包含模板的实现。只有在使用模板时才会为模板实际生成代码,因此它们的定义(不仅仅是声明)必须包含在使用模板的任何文件中。
建议¶
仅包含头文件。重构代码,将类声明和函数原型放到头文件,并将它们的定义放到源文件(*.c, *.cpp
)文件中。
示例¶
#include <iostream.h> //correct: iostream.h is a header file
#include "implementation.c" //wrong: include header files only
...
参考¶
AV 规则 32,联合攻击战斗机空中车辆 C++ 编码标准。洛克希德·马丁公司,2005 年。
Scott Meyers。第 38 项,有效 C++:改进您的程序和设计的 50 种特定方法,第 2 版。Addison-Wesley,1998 年。