mk1*_*k12 42 constants objective-c naming-conventions
为什么我见过的所有例子中的常量总是以k开头?我应该在header或.m文件中#define常量吗?
我是Objective C的新手,我不知道C.是否有某些教程可以在不知道C的情况下解释这些类型的东西?
mip*_*adi 38
使用"k"启动常量是Mac OS X之前的遗留问题.其实,我觉得练习,甚至可能来自方式,早在天,当Mac OS的在帕斯卡大多写的,主要的开发语言是帕斯卡.在C中,#define
'd常量通常用ALL CAPS编写,而不是用"k"加前缀.
至于#define
常数的位置:#define
它们将在哪里使用它们.如果您希望#import
代码使用常量的人,请将它们放在头文件中; 如果常量只在内部使用,请将它们放在.m
文件中.
如果您打算.m
使用这些常量以外的文件来使用这些常量,则必须将常量放在标题中,因为它们无法导入.m
文件.
您可能对Cocoa Dev Central的Cocoa程序员C教程感兴趣.它解释了许多核心概念.
该k
前缀来自许多开发人员喜欢在代码中使用匈牙利表示法的时代。在匈牙利表示法中,每个变量都有一个前缀,告诉您它是什么类型。pSize
将是一个名为“size”的指针,而iSize
将是一个名为“size”的整数。只要看名字就知道变量的类型。在没有可以随时显示任何变量类型的现代 IDE 的情况下,这非常有用,否则您始终必须搜索声明才能了解它。顺应当时的趋势,Apple 希望所有常量都有一个共同的前缀。
好吧,c
那为什么不呢,比如c
“常数”呢?因为c
已经采用了,在匈牙利符号中,c
是“计数器”(cApple
意思是“苹果数”)。作为许多语言中的关键字,也存在类似的问题class
,那么如何命名指向类的变量呢?您会发现大量代码命名该变量klass
并因此k
被选择,k
如“konstant”。在许多语言中,这个词实际上确实以 ak 开头,请参见此处。
关于你的第二个问题:如果可以避免的话,你根本不应该使用#define
常量,就像#define
无类型一样。
const int x = 10; // Type is int
const short y = 20; // Type is short
const uint64_t z = 30; // Type is for sure UInt64
const double d = 5000; // Type is for sure double
const char * str = "Hello"; // Type is for sure char *
#define FOO 90
Run Code Online (Sandbox Code Playgroud)
FOO是什么类型?这是某种数字。但什么样的数字呢?到目前为止任何类型或根本没有类型。类型取决于您FOO
在代码中使用的方式和位置。
此外,如果您有一组固定的数字,请使用enum
as ,然后编译器可以验证您使用的是有效值,并且枚举值始终是常量。
如果必须使用定义,那么在哪里定义它并不重要。头文件是在多个代码文件之间共享的文件,因此如果您需要在多个位置使用相同的定义,请将其写入头文件中,并在需要该定义的任何位置包含该头文件。写入代码文件的内容仅在该代码文件内可见,默认情况下全局可见的非静态函数和 Obj-C 类除外。但是,除非在头文件中声明了一个函数,并且该头文件包含在您要使用该函数的代码文件中,否则编译器将不知道该函数的外观(它需要什么参数,它返回什么结果值) ,因此它无法检查其中的任何内容,并且必须依赖于您正确调用它(通常这会导致它创建警告)。Obj-C 类根本无法使用,除非您至少告诉当前代码文件该名称是一个类的名称,但如果您想实际对该类执行某些操作(而不只是传递它),则编译器需要知道类的接口,这就是接口进入头文件的原因(如果该类仅在当前代码文件中使用,则将接口和实现写入文件是合法的并且也可以工作)。
归档时间: |
|
查看次数: |
15454 次 |
最近记录: |