在C程序员的十诫中,你对第9条诫命的解释是什么?
你的外部标识符在前六个字符中应该是独一无二的,尽管这种严厉的纪律是令人厌烦的,它的必要年代在你看来没有结束之前就会延伸,以免你撕裂你的头发并在那个命运的日子里生气,当你想要制造你的时候程序在旧系统上运行.
究竟这是什么一回事?
旧链接器只使用了有限数量的符号字符 - 我似乎记得我开始编程的旧IBM大型机只使用了8个字符.C标准人员将6个字符确定为"最低公分母",但如果他们愿意,可以允许链接器解析更长的名称.
如果您确实击中了这些最低公分母连接器中的一个,外部符号(函数名称,外部变量等)ABCDEFG和ABCDEFH对它们看起来是相同的.除非你在真正的旧硬件上编程,否则你可以放心地忽略这个"诫命".
请注意,任何不能处理超过6个字符的链接器都不能执行C++,因为名称是mangling.
外部标识符=可能必须从另一个系统调用的内容
前六个字符唯一的原因是古代系统的标识符可能有六个字符的限制.如果有一天,这样的系统试图调用你的代码,它需要能够区分你所有的函数.
这些天来,这对我来说似乎过于保守,除非你正在使用许多遗留系统.
以下是C/C++编译器在各种标准下必须支持的外部标识符中的最小有效字符数:
C90 - 6个字符
C99 - 31个字符
C++ 98 - 1024个字符
下面是一个示例,如果您的工具集在这些限制上受到限制,您可以遇到这些问题(来自http://www.comeaucomputing.com/libcomo/):
使用Borland和MetroWerks CodeWarrior作为后端C的用户请注意:
================================================== ================
请注意,Borland编译器和链接器以及Metrowerks编译器的外部id最大长度似乎为250个字符.事实证明,一些生成的受损模板名称无法适应该空间.因此,当Borland或Metrowerks用作后端C编译器时,我们将libcomo使用的一些名称重新映射为较短的名称.事实上,我们无法摆脱以下划线开头的名字.实际上,有必要将大多数映射到2个字符的id名称.
回应:
C++ 98 - 1024个字符
'开始幽默'
第9条诫命附录:
如果你的外部标识符接近任何接近一千二百四十四的东西,你肯定会被迅速带到外面射击.
'/ end humor'
很多旧的编译器和链接器都限制了标识符的长度.六个字符是一个共同的限制.实际上,它们可能比这更长,但编译器或链接器会丢弃第六个字符后的所有内容.
这通常是为了节省符号表内存.