0

这是书中的直接引述(K&R,第 2 版,第 35 页):

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

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

我的问题是为什么这些限制特别是3163?为什么是这个数字?为什么不是19、24或任何其他数字?如果这是一个实施问题,将其设为 3163是否有好处?

4

1 回答 1

8

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

于 2012-04-13T13:13:48.740 回答