2010-07-30 105 views
5

我想问一个关于objective-C的问题,或者可能是C语言。我想问下面#define的代码是什么意思?它喜欢声明一个变量吗?目标C中#define的含义是什么?

#define kMountainNameString   @"name" 
#define kMountainHeightString   @"height" 
#define kMountainClimbedDateString  @"climbedDate" 

回答

13

这是一个简单的文本替换宏。与C,C++中的工作方式相同。

其中kMountainNameString出现,编译器将“粘贴” @“name”。从技术上讲,这发生在编译器之前,被称为预处理器的机制发生。

+2

它,做替代的预处理器。编译器不会看到任何#defines。 – codaddict 2010-07-30 04:19:20

+0

是的,当时(也许还是今天)预处理是由一个单独的独立工具完成的。 – seand 2010-07-30 04:22:22

+0

感谢您的回复。我想问一下这3个元素的数据类型是什么? – Questions 2010-07-30 04:26:08

1

预处理取代kMountainNameString出现的所有与@“名” 在编译之前就开始了。

5

#define是由C继承了预处理指令,采取的形式

#define identifier value 

在一般情况下,它被用来告诉预处理器在传递之前,将与给定的文本,以取代identifier所有实例代码到编译器。也可以定义标识符而不使用值作为编译器标志,以防止对相同变量进行多重定义,或者在执行过程中不会更改的机器细节上进行分支。例如,要根据你的处理器的架构,你可以做这样的事情不同的代码传递给编译:

#ifdef INTEL86 
//some 32-bit code 
#else 
//some 64-bit code 
#endif 

当这些定义分配值,它往往是一个好主意,围绕用括号中的数值,从而保存它作为一个单元,而不管它存在于上下文的

例如,#define FOO 3 + 7具有不同的结果#define FOO (3 + 7)上下面的行的结果,由于算术运算的顺序:

a = 3 * FOO 

参见this link有关预处理器指令的详细信息中一般或this link的信息,目的C.更集中

0

#定义是在C和C++语言的预处理器指令。

它用于定义文本的预处理器宏。 #define用于在整个文件所在的位置进行替换。

#define <macro-name> <replacement-string> 
相关问题