出于教育目的,我已经开始编写自己的 C 编译器。我的目标是基本上符合 C99 标准。现在我有一个关于标识符的最大长度的问题。
这是 C99 规范中有关标识符长度的摘录:
- 内部标识符或宏名称中的 63 个重要初始字符(每个通用字符名称或扩展源字符被视为单个字符)
- 外部标识符中的 31 个有效初始字符(指定 0000FFFF 或更少的短标识符的每个通用字符名称被视为 6 个字符,指定 00010000 或更大的短标识符的每个通用字符名称被视为 10 个字符,每个扩展源字符是被认为与相应的通用角色名称相同数量的字符(如果有)
据我所知,本地标识符(本地变量名或静态函数名)的最大长度为 63 个字符,外部标识符的最大长度为 31 个字符。如果我完全错了,请纠正我。
在标准的另一页上,我读到了以下内容:
标识符是一系列非数字字符(包括下划线_、大小写拉丁字母和其他字符)和数字,它指定一个或多个实体,如6.2.1中所述。小写和大写字母是不同的。 标识符的最大长度没有具体限制。
我已经标记了我被误解的句子。
有人可以澄清标识符的真正限制吗?因为在一个文本段落中存在限制,而在另一文本段落中则没有限制。
SO 上存在两个类似的问题:
C 中标识符长度的限制
C 和 C++ 语言的 Turbo C++ 和 Dev-C++ 中标识符的最大长度
目前我不知道哪些限制有用。如果设置了编译器标志 -std=c99
,则如果存在 31 或 63 个字符的软限制,我也不会尝试使用
GCC(作为示例)。
有人可以澄清标识符的真正限制吗?因为在一个文本段落中存在限制,而在另一文本段落中则没有限制。
您没有正确阅读第一个来源。
它开始于:
实现应能够翻译和执行至少一个程序,其中至少包含以下每一项限制的一个实例:
列表后面有脚注:
- 实施应尽可能避免施加固定的翻译限制。
这意味着,本节没有定义任何“上限”。它只是要求编译器必须至少支持这些数字,并且如果可能的话不应有任何限制。这使得该列表成为“下限”列表。如果你有足够的内存来编译程序,那么你不应该因为某些标识符太长而失败。 这部分作为结论
目前我不知道哪些限制有用。
可以回答:至少您的 RAM 是极限。但请确保您能够处理
标准中给出的数字。