关于K&R C中变量名的内容,我有些困惑.原文如下:
至少内部名称的前31个字符是重要的.对于函数名和外部变量,该数字可能小于31,因为外部名称可能由语言无法控制的汇编程序和加载程序使用.对于外部名称,该标准仅保证6个字符和单个案例的唯一性.保留if,else,int,float等关键字:不能将它们用作变量名.它们必须是小写的.选择与变量的目的相关的变量名称是明智的,并且不太可能在排版上混淆.我们倾向于为局部变量使用短名称,尤其是循环索引,以及外部变量的较长名称.
令我困惑的是外部名称,标准保证仅6个字符和单个案例的唯一性.这是否意味着对于外部名称,只有6个前导字符有效且剩余字符都被忽略?例如,我们定义了两个外部变量myexvar1和myexvar2,编译器会将这两个变量视为一个?如果这是真的,为什么他们建议我们使用更长的名称作为外部变量?
这是否意味着对于外部名称,只有6个前导字符有效且剩余字符都被忽略?例如,我们定义了两个外部变量myexvar1和myexvar2,编译器会将这两个变量视为一个?
是的,这在1990年是正确的.或者更确切地说,外部标识符的6个独特的主要字符是C90标准设置为编译器的最小限制.这当然是疯狂的 - 这就是为什么这个限制在C99增加到31.
实际上,大多数C90编译器都有至少31个用于内部和外部标识符的唯一字符.
如果这是真的,为什么他们建议我们使用更长的名称作为外部变量?
不确定他们是否建议.但是K&R中使用的编码风格通常很简单,所以它绝对不是一本你应该参考编码风格建议的书.
在现代C中,我们需要(C17 5.2.4.1):
内部标识符或宏名称中的63个重要的初始字符
外部标识符中有31个重要的初始字符
所以不要过分担心恐龙面临的限制,而是遵循现代标准C.
正如另一个答案中所指出的,即使外部标识符的31个重要初始字符的限制也被列为过时,这意味着在未来的标准中,这可能会进一步增加到255.