(K&R)至少内部名称的前31个字符是重要的?

wit*_*als 14 c variables kr-c names

从字面上看,它是有道理的,但它究竟是什么意思成为变量名称的重要字符?

我是使用K&R开始学习C语言的人.这是本书的直接引用:

"至少内部名称的前31个字符是重要的.对于函数名称和外部变量,数字可能小于31,因为外部名称可能被汇编程序和加载程序使用,语言无法控制.对于外部名称,该标准仅保证6个字符和一个案例."

顺便说一句,"单一案例"是什么意思?

S.L*_*ott 19

单个案例通常意味着"小写".除了某些操作系统,它意味着"大写".关键是混合的情况不能保证有效.

abcdef

ABCDEF
Run Code Online (Sandbox Code Playgroud)

不同之处仅在于案例.这不保证有效.

"重要性"问题是多少个字母可以相同的问题之一.

假设我们只有6个重要字符.

a_very_long_name

a_very_long_name_thats_too_similar
Run Code Online (Sandbox Code Playgroud)

看起来不一样,但前16个字符是相同的.由于只有6个是重要的,因此它们是相同的变量.

  • 正确.只有个案不同的事情并不能保证工作.他们可能会工作,但这是一个意外.你不会很快就会使用汇编程序.您的加载程序是您的操作系统的一部分.大多数装载机处理很长的名称.当我是一名n00b程序员(在80年代)时,6个字符的东西在一些操作系统上很严重.对于标准操作系统(Linux,MacOS等),不用担心.对于Windows,几乎不用担心. (2认同)

bob*_*nce 5

这意味着你担心它意味着什么.对于外部名称,K&R 2nd ed时的C标准.写的确实只给了六个不区分大小写的字符!所以你不能拥有afoobaraFooBaz作为独立的实体.

这种荒谬的限制(适用于现在已久的传统连接器)不再适用于任何环境.C99标准为外部名称提供了31个区分大小写的字符,在内部提供了63个字符,实际使用的连接符支持更长的名称.