C 中标识符的翻译限制

问题描述 投票:0回答:1

出于教育目的,我已经开始编写自己的 C 编译器。我的目标是基本上符合 C99 标准。现在我有一个关于标识符的最大长度的问题。

这是 C99 规范中有关标识符长度的摘录:

  • 内部标识符或宏名称中的 63 个重要初始字符(每个通用字符名称或扩展源字符被视为单个字符)
  • 外部标识符中的 31 个有效初始字符(指定 0000FFFF 或更少的短标识符的每个通用字符名称被视为 6 个字符,指定 00010000 或更大的短标识符的每个通用字符名称被视为 10 个字符,每个扩展源字符是被认为与相应的通用角色名称相同数量的字符(如果有)

C99 (N1256) 第 5.2.4.1 节

据我所知,本地标识符(本地变量名或静态函数名)的最大长度为 63 个字符,外部标识符的最大长度为 31 个字符。如果我完全错了,请纠正我。

在标准的另一页上,我读到了以下内容:

标识符是一系列非数字字符(包括下划线_、大小写拉丁字母和其他字符)和数字,它指定一个或多个实体,如6.2.1中所述。小写和大写字母是不同的。 标识符的最大长度没有具体限制

C99 (N1256) 第 6.4.2.1 节

我已经标记了我被误解的句子。

有人可以澄清标识符的真正限制吗?因为在一个文本段落中存在限制,而在另一文本段落中则没有限制。

SO 上存在两个类似的问题:
C 中标识符长度的限制
C 和 C++ 语言的 Turbo C++ 和 Dev-C++ 中标识符的最大长度

目前我不知道哪些限制有用。如果设置了编译器标志 -std=c99,则如果存在 31 或 63 个字符的软限制,我也不会尝试使用

GCC
(作为示例)。

c compiler-construction language-lawyer c99
1个回答
3
投票

有人可以澄清标识符的真正限制吗?因为在一个文本段落中存在限制,而在另一文本段落中则没有限制。

您没有正确阅读第一个来源。

它开始于:

实现应能够翻译和执行至少一个程序,其中至少包含以下每一项限制的一个实例:

列表后面有脚注:

  1. 实施应尽可能避免施加固定的翻译限制。

这意味着,本节没有定义任何“上限”。它只是要求编译器必须至少支持这些数字,并且如果可能的话不应有任何限制。这使得该列表成为“下限”列表。如果你有足够的内存来编译程序,那么你不应该因为某些标识符太长而失败。 这部分作为结论

目前我不知道哪些限制有用。

可以回答:

您的 RAM 是极限。但请确保您能够处理
至少

标准中给出的数字。

© www.soinside.com 2019 - 2024. All rights reserved.