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

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

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

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

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

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