目标C中#define的含义是什么?

时间:2010-07-30 04:12:55

标签: objective-c c c-preprocessor

我想问一个关于Objective-C的问题,或者可能是 C 语言。我想问一下#define的以下代码的含义是什么?是否要申报变量?

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

4 个答案:

答案 0 :(得分:14)

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

如果出现kMountainNameString,编译器将“粘贴” @“名称”。从技术上讲,这是在编译器之前通过称为预处理器的机制发生的。

答案 1 :(得分: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;有关更关注目标C的信息,请参阅this link

答案 2 :(得分:1)

预编译器在编译开始之前用@“name”替换所有出现的kMountainNameString。

答案 3 :(得分:0)

#define是c和c ++语言中的预处理程序指令。

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

#define <macro-name> <replacement-string>