繁体   English   中英

最大标识符长度

[英]Max identifier length

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

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

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

C标准 ,第5.2.4.1节说:

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

它还包含一个脚注:

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

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

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

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

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

简而言之,没有头文件可以告诉您,这是ANSI / ISO C标准规范的一部分,它定义了C语言本身的语法和环境机制的布局。 在C89之前的标准中,最大标识符长度为6,因为大型机和* nix系统等系统的内存占用空间很小。

今天,最新的标准是C99标准,它规定标识符的最大长度为32,原因很简单和逻辑......编译器通过解析输入流来作为命令行参数传递, makefile或解决方案(对于Microsoft Visual Studio环境),解析器是严格的并且是固定的,因此对标识符的长度施加了限制,以便解析器可以向前看并查看是否还有其他字符。 这是因为它的原因。

另一个原因是大多数C ++编译器在标识符上使用名称修改,正如Jonathan Leffler指出的那样,可能会混淆编译器以及代码的链接。

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

#define SOMEREALLYREALLY...REALLYLONGNAME 1
#if SOMEREALLYREALLY
#define MAXIDENT 16
#elif SOMEREALLYREALLYR
#define MAXIDENT 17
#elif SOMEREALLYREALLYRE
#define MAXIDENT 18
...and so on

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM