在C中,名称"forgiveme"和"forgivemenot"何时可以引用相同的变量?

Nik*_*nka 3 c variable-declaration

网站说,"不要你的变量给予相似的名称.例如,编译器可以假定forgivemeforgivemenot是同一个变量.如果是的话,可能会出现一个丑陋的局面."

我从来没有在变量命名中读过这个问题.这种丑陋的情况什么时候最有可能发生?他们说编译器可能认为它们不是同一个变量是什么意思?

sim*_*onc 9

名称在前31个字符中应该是唯一的

§5.2.4.1C11标准的翻译限制表示

该实现应能够翻译和执行至少一个包含以下每个限制的至少一个实例的程序:18)

- 外部标识符中有31个重要的初始字符(每个通用字符名称指定0000FFFF或更短的短标识符被认为是6个字符,每个字符18个)实现应尽可能避免强加固定的转换限制.

同样的限制适用于C99,因此您的示例名称应该由过去10年以上的任何符合标准的编译器唯一标识.


Ale*_*nze 5

C(1999年)标准中说5.2.4.1 Translation limits:

该实现应能够翻译和执行至少一个包含以下每个限制的至少一个实例的程序:
- 外部标识符中的31个重要的初始字符...

然后在6.4.2 Identifiers / 6.4.2.1 General:

如5.2.4.1中所讨论的,实现可以限制标识符中重要的初始字符的数量; ...

任何重要字符不同的标识符都是不同的标识符.如果两个标识符仅在非显着字符上不同,则行为未定义.

因此,forgivemeforgivemenot正在考虑,如果有小于同10支持显著的字符是一个很好的未定义的行为.

31以前是61989年的C标准(AKA ANSI C).