相互关联的条件编译指令应在同一文件中
3.4.7 ID_incompleteDirective
#if、#ifdef 与对应的 #else、#elif、#endif 应在同一文件中,否则会使代码难以阅读和维护。
示例:
// a.h
#ifdef M // Non-compliant
....
// b.h
#else // Non-compliant
....
// c.h
#include "a.h"
#include "b.h"
#endif // Non-compliant
示例代码将 #ifdef、#else、#endif 分成了三个文件,使这些文件的依赖关系变得复杂,也使单个文件失去了可读性。
参考
MISRA C 2004 19.17
MISRA C 2012 20.14
MISRA C++ 2008 16-1-2