以'k'开头的常数有什么意义?

24

我正在自学Objective-C,我注意到在很多书籍和示例中,常量定义时使用了'k'和驼峰命名法,例如:

#define kMyConstant 0

'k'的意义是什么?这个习惯是Objective-C独有的,还是在C语言中普遍存在的?为什么要偏离(我一直认为是最佳实践的)K_MY_CONSTANT风格?谢谢。

4个回答

29

在SO的问题中曾经提到过,Cocoa中的小写"k"

它是一种通用的编程表示法,不特定于Objective-C(即匈牙利标记),其中"k"代表"常量"。

如果你查看Google缓存版的Google Objective-C指南,你会发现他们曾经将其包含在样式指南中:

常量名称(#defines、枚举、const局部变量等)应以小写k开头,然后使用混合大小写分隔单词,例如kInvalidHandle,kWritePerm。虽然写起来很痛苦,但它们对于保持我们的代码可读性至关重要。以下规则描述了您应该在何处进行注释。但请记住:虽然注释非常重要,但最好的代码是自我说明的。给类型和变量起合理的名称比使用晦涩的名称然后尝试通过注释来解释它们要好得多。

但它已经被移除了,在正式版中不再包含。应该注意,这与苹果公司的Cocoa编码指南相违背。


非常有趣。"一般来说,不要使用 #define 预处理器命令创建常量。对于整数常量,请使用枚举,对于浮点常量,请使用 const 限定符,如上所述。" 谢谢! - typeoneerror
抱歉,关于重复问题我发誓我先搜索了一下!;) - typeoneerror
@TypeOneError,我提到这不是为了指出一个重复的问题。我并不一定认为这是那个确切问题的重复。我只是指向另一个资源让你去阅读。你的问题可能更广泛,也更好一些。 - mmcdole
注意:Google的最新版本仍建议在变量名\常量下使用k来表示常量。 - jt-gilkeson

4
这个东西可以追溯到非常早期的Mac编程时代(80年代/90年代被称为“非常古老”)。这是苹果公司使用的标准,许多Mac程序员也使用它;这取代了MY_CONSTANT类型的定义。

我想你正在阅读的作者以前是Mac Pascal / C程序员,之后成为了NeXT / Cocoa程序员。 Mac库曾经被称为“Toolbox” - 这是一组API和库,随着时间的推移变成了Carbon。

我有时仍然会使用kMyConstant; 这让我的老派Unix程序员同事感到不舒服。 :-)


4
我认为使用前导“k”的原因是,所有语言都将其发音为硬辅音,因此它会让人们想起英语中“constant”的发音 :-)
没有保留字以k开头,因此更容易作为搜索目标。
另一方面,从图形方面来看,作为前导字符,它在名称的其余部分之前提供了非常清晰的标志。前导“c”不太明显,可能用于指示角色(例如在匈牙利符号中)或类(如果在大小写不敏感的语言中)。
MY_CONSTANT被广泛认为是基于宏的常量。有时候知道一个常量是由宏定义的很重要,例如这意味着它基于文字,并因此来自有限范围的数据类型,同时在全局范围内定义,因此(正如Michael Burr所指出的那样)覆盖任何本地命名空间常量。

3

全大写字母(如K_MY_CONSTANT)通常表示宏 - 不一定是常量。宏通常需要突出显示,因为它们会覆盖所有命名空间。

在C/C++和其他语言中,'k'约定用于非宏常量,但并非普遍适用。我怀疑 'k' 之所以被使用,是因为 'c' 已经经常被用来表示类名(如CString),或者表示变量是一个计数器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接