即使是标准库中的函数名也很长,例如
longjmp
、tmpfile
和strncat
。其中后者strncat
表明他们必须努力发明库名称,使前六个字符唯一,而不是更合理的strcatn
,因为它将与strcat
发生冲突。
为什么这对我仍然是个问题?
我喜欢旧式计算机。我正在尝试编写程序,以便在C99之前的平台上编译并且能够正常工作,但有时在我心爱的目标上不存在这种情况。也许我还喜欢真正遵循标准。通过挖掘旧标准,尝试追踪某些限制和实现问题的原因,我已经学到了很多关于C99和C11的知识。
因此,即使我不知道任何编译器或链接器实际上会强制执行或施加此限制,如果我还想使用易读且不冲突的外部标识符,那么我仍然无法声称编写了严格符合标准的代码,这令我感到困扰。
为什么他们会施加这样的限制呢?
他们在80年代早期开始标准化工作,并在1988或1989年完成。即使在70年代和60年代,处理更长的标识符也不会有任何问题。考虑到任何想要符合新标准的编译器都必须进行修改 - 即使仅是更新文档 - 我不认为ANSI坚定地说出类似于“现在已经是1989年了。您必须处理31个重要的初始字符”这样的话是不合理的。对于任何平台,甚至是古老的平台,这都不会成为问题。
向后兼容性?
从我搜索到的内容来看,问题可能来自FORTRAN。在对C(变量中的“重要字符”的确切角色是什么?的回答中,Jonathan Leffler写道:
“问题的一部分可能是Fortran;它只需要支持6个字符的单音节名称,因此在广泛使用Fortran的系统上链接器不需要支持更长的名称。”对我来说,这似乎是回答“为什么?”最合理的答案。但考虑到每当我想编写一个理论上可以在旧系统上构建的程序时,这种限制都会让我感到困扰,我想知道更多细节。”
问题
- 在搜索了一些关于FORTRAN轨迹的资料后,我只找到了理论和手舞足蹈的东西。哪些流行平台确实限制了只能使用6个字符?有没有一种特别流行的链接器,迫使标准委员会让步?
- 当这些细节被讨论时,我还不够老,对此并不感兴趣。这个限制及其原理是否公开讨论和辩护过?是否有公众强烈反应,或者只是默默无闻?有人在ANSI总部外举起了长柄耙子吗?
最终,这些问题的答案将使我更容易决定给我的函数取一个合理的名称,以便我晚上睡得更好。