在Objective-C中定义后的冒号

在Objective-C中定义后的冒号,objective-c,macros,Objective C,Macros,在Objective-C中,您可以使用#define #define kSomeMacro 1024 然后用这个宏来做这样的事情 if (kSomeMacro == 1024) { .... } 但是,如果定义宏的末尾带有冒号 #define kSomeMacro 1024; 那么if语句就不起作用了。这背后的原因是什么?如果您输入,为什么编译器不抱怨定义宏时?宏只是被其定义替换。当你#定义k1024

在Objective-C中,您可以使用
#define

#define kSomeMacro 1024
然后用这个宏来做这样的事情

if (kSomeMacro == 1024) {
   ....
}
但是,如果定义宏的末尾带有冒号

#define kSomeMacro 1024;

那么if语句就不起作用了。这背后的原因是什么?如果您输入
,为什么编译器不抱怨定义宏时?

宏只是被其定义替换。当你
#定义k1024
编译器实际看到的是:

if(1024; == 1024) ...
它不能编译


编译器不会抱怨,因为有时您可能真的想在宏中添加分号(
称为分号,而不是冒号,它是
),因为它是一个简单的文本替换。因此,
如果(1024;==1024){
无效。