我正在教自己Objective-C,我在很多书和例子中都注意到了'k'和骆驼套管的不断定义,例如:
#define kMyConstant 0
'k'有什么意义? 这是Objective-C风格的独特之处,还是一般的C共同? 为什么偏离(我一直认为最好的做法)K_MY_CONSTANT风格?
感谢。
答案 0 :(得分:23)
之前在SO问题中提到过Lower case "k" in Cocoa。
这是一种通用的编程符号 不特定于Objective-C(即 匈牙利表示法)和“k”代表“常数”。
如果您查看Google的Objective-C指南Google cache,您可以看到他们过去常常将其包含在其样式指南中:
常量名称(#define,enums,const局部变量等)应以小写k开头,然后使用大小写分隔单词,即kInvalidHandle,kWritePerm。
虽然写作很痛苦,但它们对于保持我们的代码可读性至关重要。以下规则描述了您应该评论的内容和位置。但请记住:虽然评论非常重要,但最好的代码是自我记录。为类型和变量提供合理的名称比使用晦涩的名称然后尝试通过注释解释它们要好得多。
但此后它已在文档的live version中删除。应该注意的是,它违反了Apple的Official Coding Guidlines for Cocoa。
答案 1 :(得分:3)
所有大写字母(如K_MY_CONSTANT
中所示)通常表示一个宏 - 不一定是常量。宏通常很重要,因为它们会破坏所有名称空间。
对于C / C ++中的非宏常量以及可能的其他语言,使用了'k
'约定(但不是普遍的)。我怀疑使用'k
'因为经常使用“c
” - 要么表示类名(如CString
),要么变量是计数器。
答案 2 :(得分:3)
kMyConstant可以追溯到非常古老的Mac编程日(80年代/ 90年代“非常古老”)。这是Apple使用的标准版本,许多Mac程序员也使用过;这取代了MY_CONSTANT类型的定义。
我认为您正在阅读的作者是旧的Mac Toolbox的Mac Pascal / C程序员,他们是NeXT / Cocoa程序员之前。 Mac库曾经被称为“工具箱” - 这是随着时间的推移变成碳的API和库的集合。
我有时候还会使用kMyConstant;驱动我的老学校Unix程序员同事坚果。 : - )
答案 3 :(得分:3)
我认为使用领先的“k”是因为所有语言都将它称为硬辅音,因此它提醒人们英语发音为“常数”: - )
没有保留字以k开头,因此它更容易作为搜索目标。
或者,从图形方面来看,作为主角,它在名称的其余部分前面提供了一个非常清晰的标志。前导“c”不太明显,可能用于表示角色(例如匈牙利表示法)或类(如果使用不区分大小写的语言)。
MY_CONSTANT非常赞同基于宏的常量。有时候重要的是要知道一个常量是由宏定义的,例如,它意味着它基于文字,因此来自有限范围的数据类型,以及在全局范围内定义,因此(如Michael Burr指出的那样) out)覆盖任何本地命名空间常量。