Car*_*rum 23
没有头文件包含标识符长度限制; 即使有,它怎么能帮到你?无论如何,您无法在编译时根据头文件中的值更改标识符长度.
在C标准,部分5.2.4.1说:
- 内部标识符或宏名称中的63个重要初始字符(每个通用字符名称或扩展源字符被视为单个字符)
- 外部标识符中的31个重要的初始字符(指定短标识符0000FFFF或更少的每个通用字符名称被认为是6个字符,指定短标识符00010000或更多的每个通用字符名称被认为是10个字符,并且每个扩展源字符被认为是与相应的通用字符名称相同的字符数(如果有)
它还包含一个脚注:
实施应尽可能避免强制实施固定的翻译限制.
因此,您应该检查文档,看看您的编译器是否支持标识符中更多的重要字符.
Jon*_*ler 10
没有标题告诉你.您必须根据您可能要移植的平台做出明智的决定.Carl Norum指出了C99标准所说的内容.
曾几何时,对于外部变量,您只能依赖6个唯一字符(单例) - 因为这是一些大型机环境提供的.(这是C89标准所说的 - 但它注意到这种限制是痛苦的.)
这些天,部分原因是由于C++中的类型安全链接,您可以合理地依赖外部符号的更长名称.如果你开始漂移超过31个字符,你可能会遇到问题 - 但你也遇到了可读性问题.
小智 5
由于有一些奇怪的极端情况,让代码知道限制是有帮助的,这里有一个方法可以放在(虽然看起来很可怕)头文件中:
#define SOMEREALLYREALLY...REALLYLONGNAME 1
#if SOMEREALLYREALLY
#define MAXIDENT 16
#elif SOMEREALLYREALLYR
#define MAXIDENT 17
#elif SOMEREALLYREALLYRE
#define MAXIDENT 18
...and so on
Run Code Online (Sandbox Code Playgroud)
最终,如果编译器不截断,#ifs 将命中截断的标识符或完整标识符