最大标识符长度

时间:2010-02-28 18:58:26

标签: c

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

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

4 个答案:

答案 0 :(得分:24)

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

C standard,第5.2.4.1节说:

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

它还包含一个脚注:

  

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

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

答案 1 :(得分:9)

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

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

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

答案 2 :(得分:3)

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

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

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

答案 3 :(得分:0)

由于在某些异常情况下,使代码知道限制非常有用,因此可以将这种方法放在(尽管看起来很丑)头文件中:

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

最终,如果编译器不截断#if,则它们将击中截断的标识符或完整的标识符