C中"重要字符"的确切作用是什么,特别是在变量领域?我已经阅读了主题" (K&R)至少前31个字符...... ",但我真的不明白重要字符的确切规则.我唯一理解的是这个主题已经灭绝,但我仍然需要知道!
Jon*_*ler 11
在当前的C标准中,ISO/IEC 9899:2011,第5.2.4.1节的翻译限制说:
该实现应能够翻译和执行至少一个包含以下每个限制的至少一个实例的程序:18)
...
- 内部标识符或宏名称中的63个重要的初始字符(每个通用字符名称或扩展源字符被视为单个字符)
- 外部标识符中的31个重要的初始字符(每个通用字符名称指定一个短标识符) 0000FFFF或更少被认为是6个字符,每个指定短标识符00010000或更多的通用字符名称被认为是10个字符,并且每个扩展源字符被认为是与相应的通用字符名称相同的字符数(如果有的话)19)
. ..18)实施应尽可能避免强加固定的翻译限制.
19)参见''未来语言方向''(6.11.3).§6.11.3 外部名称
1 将外部名称的重要性限制为少于255个字符(将每个通用字符名称或扩展源字符视为单个字符)是一种过时的功能,它是对现有实现的让步.
这意味着在处理名称时,编译器必须将前63个字符中不同的内部名称视为不同,但如果您被误导足以创建仅在第64 个字符中不同的两个(或更多)标识符(前63个是相同的,但是第一个中的第 64 个字符是,1并且在另一个中是z,然后编译器可以合法地并且在没有警告的情况下将这两个标识符视为相同.
外部名称的限制 - 影响链接器的名称而不是编译器本身 - 可能限制为少至31个字符.考虑:
extern int abcdefghijkjlmnopqrstuvwxyz123456;
extern int abcdefghijkjlmnopqrstuvwxyz123457;
Run Code Online (Sandbox Code Playgroud)
如果系统(链接器)将您限制为31个字符,则可以将这两个声明视为引用相同的变量.
正如未来的路线部分所述,任何短于255的限制都是"过时",这意味着在名称长度为255个字符之前不应受此限制.但该标准尚未规定255个字符作为限制.
该标准的先前版本在名称长度的上限上具有较小的下限.C89标准仅对外部名称强制使用6个字符的单体酶(但它被认为是对现有链接器的痛苦让步),所以strcmp并且StrCmp可能是相同的,因为可以abcdefg和abcdefz.部分麻烦可能是Fortran; 它只需要支持6个字符的单体酶名称,因此在Fortran被广泛使用的系统上的连接器不需要支持更长的名称.
C99的限制与C11相同.