最大标识符长度

Dev*_*vel 11 c

在哪里可以找到C中的最大标识符长度?

哪个头文件是指定的限制?

Car*_*rum 23

没有头文件包含标识符长度限制; 即使有,它怎么能帮到你?无论如何,您无法在编译时根据头文件中的值更改标识符长度.

C标准,部分5.2.4.1说:

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

它还包含一个脚注:

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

因此,您应该检查文档,看看您的编译器是否支持标识符中更多的重要字符.

  • 您可以想象一些宏预处理以一种方式或另一种方式构建标识符,具体取决于长度限制.它也可以用于代码生成. (6认同)
  • 我不知道该段落在实践中意味着什么。它有 32 个字母,但随后进入“char”长度含义。例如,_通用角色名称_是什么?如果我使用编译为 10 个字符的实体,这是否意味着我真的只有 3 个字母的空间?什么时候会发生这种情况?中国人? (2认同)
  • 我明白了:-) 该段落首先讨论了外部标识符的 31 个字符标识符长度。这通常相当于 31 个 ASCII 字母,但该段落的其余部分使用了一些(对我而言)未知的术语,例如 _universal character name_。那是什么?像多字节Unicode字符之类的东西? (2认同)
  • @Mecki 因为对于一个库来说,为拥有可以处理长标识符的 C 实现的绝大多数用户提供长标识符的所有好处,并将短标识符(以及由此产生的问题)留给其他人,是有用且有价值的。只是必须与它们打交道的用户。 (2认同)
  • 否则我会+1这个,但我必须-1纯粹是为了“它对你有什么帮助?你不能在编译时改变你的标识符长度”。因为 1) 可以做到这一点,例如,通过使用预处理器条件选择函数名称,如“#if [头文件中定义的假设宏的名称,持有外部标识符长度限制] > 6”,以及 2) 告诉人们一些错误或错误的信息显然是有轻微危害的。 (2认同)

Jon*_*ler 10

没有标题告诉你.您必须根据您可能要移植的平台做出明智的决定.Carl Norum指出了C99标准所说的内容.

曾几何时,对于外部变量,您只能依赖6个唯一字符(单例) - 因为这是一些大型机环境提供的.(这是C89标准所说的 - 但它注意到这种限制是痛苦的.)

这些天,部分原因是由于C++中的类型安全链接,您可以合理地依赖外部符号的更长名称.如果你开始漂移超过31个字符,你可能会遇到问题 - 但你也遇到了可读性问题.

  • C89为+1,外部标识符只有6个字符. (4认同)

小智 5

由于有一些奇怪的极端情况,让代码知道限制是有帮助的,这里有一个方法可以放在(虽然看起来很可怕)头文件中:

#define SOMEREALLYREALLY...REALLYLONGNAME 1
#if SOMEREALLYREALLY
#define MAXIDENT 16
#elif SOMEREALLYREALLYR
#define MAXIDENT 17
#elif SOMEREALLYREALLYRE
#define MAXIDENT 18
...and so on
Run Code Online (Sandbox Code Playgroud)

最终,如果编译器不截断,#ifs 将命中截断的标识符或完整标识符