至少内部名称的前31或63个字符是重要的?

HAT*_*ZAB 0 c c++ variables kr-c names

以下是本书的直接引用(K&R,第2版,第35页):

"至少内部名称的前31个字符是重要的.对于函数名称和外部变量,数字可能小于31,因为外部名称可能被汇编程序和加载程序使用,语言无法控制.对于外部名称,该标准仅保证6个字符和一个案例."

在C99中,其内部名称没有长度限制,但只有前63个保证是重要的(§5.2.4.1翻译限制).

我的问题是为什么这些限制特别是3163?为什么这个号码具体?为什么不是19,24或任何其他数字?如果这是一个实施问题,是否可以从3163获益?

D.S*_*ley 8

与语言设计委员会相关联的编译器/链接器编写器通常会施加一些限制,以便它们可以在工具链的实现中或在随附的二进制文件格式(例如,ELF,COFF等)中进行假设.数字31和63的选择可能仅仅因为它们是2 n -1而程序员喜欢2 n因为某些愚蠢的原因.-1通常用于说明名称中的前导_或尾随NUL字符.

  • 因为它是C,所以尾随\ 0是一个安全的赌注.@HATEMEL-AZAB:"工具链"通常是指用于构建C程序的工具序列:预处理器,编译器,链接器. (2认同)