3

这个网站说“不要给你的变量起类似的名字。例如,编译器可能会假设forgivemeforgivemenot是同一个变量。如果是这样,可能会出现丑陋的情况。”

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

4

4 回答 4

9

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

§5.2.4.1 C11 标准的翻译限制说

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

— 外部标识符中的 31 个重要初始字符(指定 0000FFFF 或更小的短标识符的每个通用字符名称被视为 6 个字符,每个 18 个字符) 实现应尽可能避免施加固定的翻译限制。

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

于 2013-04-15T16:21:14.103 回答
5

C(从 1999 年开始)标准在5.2.4.1 Translation limits

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

然后在6.4.2 Identifiers / 6.4.2.1 General

如 5.2.4.1 所述,实现可能会限制标识符中有效初始字符的数量;...

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

因此,如果支持的重要字符少于支持的重要字符,则被视为相同forgiveme是一种很好的未定义行为。forgivemenot10

3161989 年的 C 标准(AKA ANSI C)中的内容。

于 2013-04-15T16:25:43.317 回答
4

很久以前,一个符号的最大长度是八个字符。您可以使用超过八个的符号,但只有前八个是重要的。

那个时间在80年代的某个地方过去了。

于 2013-04-15T16:19:55.017 回答
3

曾经有一段时间,有(有)编译器限制了变量名的长度。例如,如果有问题的编译器只允许 8 个字符的变量名,那么实际上这将是一个问题,因为两者都是forgivemeforgivemenot一个变量forgivem

然而,大多数现代编译器这不是问题。如果您正在使用一个神秘的编译器,或者一个存在变量名长度问题的小型嵌入式系统编译器,那么这可能是一个问题。

于 2013-04-15T16:19:59.167 回答