![](/img/trans.png)
[英]What is max length for an C/C++ identifier on common (build) systems?
[英]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.