按照C标准,子条款6.10.2,第5段[ISO/IEC 9899:2011],C源包括名称长度
执行应提供由一个或多个的序列 独特映射非数字或数字(6.4.2.1)后跟 (。)和单个非数字。第一个字符不能是 数字。该实施可能会忽略字母顺序案例 的区别,并将该映射限制为在 时间段之前的八个重要字符。
这将意味着如果两个包含文件具有共同的前8个字符,则它实际选取的标头是未定义的。
当我使用clang或gcc编译时,我并没有真正面对这个问题。但是,在GCC和Clang中是否有源文件包含的记录行为?
在现代世界中,如果任何编译器真的限制为8个字符,我会觉得很奇怪。
参考:C11 WG14 draft version N1570,Cert C Coding standard
POSIX具有'NAME_MAX'和'PATH_MAX'宏,_gcc_也可以基于这些限制。对于8个字符的限制,也许在嵌入式世界? – md5
关键词是_may_。也许这个问题可以通过使用[8.3文件名](https://en.wikipedia.org/wiki/8.3_filename)格式的旧fat在系统中触发 – LPs
@ md5即使嵌入式系统可以被限制,通常也会开发固件在现代系统上使用交叉编译器。 – LPs