include 指令应位于文件的起始部分
3.1.5 ID_badIncludePosition
include 指令之前的代码只应为预编译指令或注释,否则不利于阅读和维护。
用于包含模板实现文件的 include 指令可不受本规则限制,但相关文件的命名应与普通头文件有所区别。
示例:
#include "a.h" // Compliant
extern int i;
#include "b.h" // Non-compliant
extern
#include "c.h" // Non-compliant, undefined behavior
如果声明的一部分在头文件内,另一部分在头文件外,会导致标准未定义的行为。
依据
ISO/IEC 9899:1999 7.1.2(4)
ISO/IEC 9899:2011 7.1.2(4)
ISO/IEC 14882:2003 17.4.2.1(3)
ISO/IEC 14882:2011 17.6.2.2(3)
ISO/IEC 14882:2017 20.5.2.2(3)
参考
MISRA C 2012 20.1
MISRA C++ 2008 16-0-1