避免在 include 指令中使用特殊字符
3.1.2 ID_nonStandardCharInHeaderName
特殊字符,即除英文字母、数字、下划线和点号之外的字符,可能与文件系统发生冲突,也可能导致标准未定义的行为,不应出现在头文件和相关目录的名称中。
示例:
#include <"foo"> // Non-compliant
#include <foo*> // Non-compliant
#include <foo'bar> // Non-compliant
#include <foo> // Compliant
#include <foo.h> // Compliant
#include <foo_bar> // Compliant
可以使用 / 作为路径分隔符,但路径中不应出现 // 或 /*,否则会导致未定义的行为,如:
#include <foo//bar.h> // Non-Compliant, undefined behavior
#include <foo/*bar.h> // Non-Compliant, undefined behavior
另外,某些平台的文件路径不区分大小写,建议头文件和相关目录均以小写字母命名以提高可移植性。
依据
ISO/IEC 9899:1999 6.4.7(3)-undefined
ISO/IEC 9899:2011 6.4.7(3)-undefined
ISO/IEC 14882:2003 2.8(2)-undefined
ISO/IEC 14882:2011 2.9(2)-implementation
参考
MISRA C 2004 19.2
MISRA C 2012 20.2
MISRA C++ 2008 16-2-4