2010-02-28 127 views
8

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

在哪个头文件中指定了该限制?

+0

为什么你想使用这么长的标识符这个问题呢? – Tronic 2010-02-28 19:12:02

+3

@Tronic,在C89中,外部标识符限制为6个重要字符。 – 2010-02-28 19:21:57

回答

21

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

C standard,节5.2.4.1表示:在内部标识符或宏名称

  • 63显著初始字符(每个通用字符名或扩展源字符被认为是一个单个字符)
  • 外部标识符中的31个有意义的初始字符(指定短标识符0000FFFF或更少的每个通用字符名称被认为是6个字符,指定短标识符00010000或更多的每个通用字符名称被认为是10个字符,并且每个扩展源字符是求索红色相同的字符数与相应的通用字符的名字,如果有的话)

它还包含了一个注脚:

实现应该避免强加固定的翻译限制只要有可能。

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

+0

哪个头文件是指定的限制? – Devel 2010-02-28 19:03:12

+0

它不在头文件中,它在你的编译器文档中。标识符在运行时消失。 – 2010-02-28 19:07:14

+0

@Devel,没有这样的事情。即使有,它会如何帮助你?你不能根据头文件改变你的标识符长度,你能吗? – 2010-02-28 19:07:24

8

没有标题可以告诉你。您必须根据您可能要移植的平台作出明智的决定。卡尔诺鲁姆指出了C99标准所说的。

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

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

+0

对于只有6个字符的外部标识符的C89 +1。 – 2010-02-28 19:22:23

3

总之,没有头文件告诉你,这是ANSI/ISO C标准规范的一部分,它定义了C语言本身的语法和环境机制的布局。在C89之前的标准中,由于诸如大型机和* nix系统等系统上的小内存占用和环境,最大标识符长度为6。

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

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

希望这会有所帮助, 最好的问候, 汤姆。