什么是#ifdef __OBJC__正在做什么以及为什么库列在下面?

时间:2011-07-25 04:06:28

标签: objective-c ios ios4 import conditional-compilation

我相信#ifdef __OBJC__指令确保我只为Objective-C导入以下类库。在ifdef语句之后列出类库的目的是什么?这个代码示例有没有打败目的?

#ifdef __OBJC__
#import <foundation/foundation.h>
#import <uikit/uikit.h>
#import <coredata/coredata.h>
#endif
</coredata/coredata.h></uikit/uikit.h></foundation/foundation.h>

4 个答案:

答案 0 :(得分:3)

Objective-C是C的超集(就像C ++一样),并且通常来自不同语言的文件将在同一项目中使用并共享标头,尤其是前缀标头。与#ifdef __OBJC__一样,#ifdef __cplusplus可让您为相应的语言添加(或#import Objective-C)标题。

.c,.cpp和.m文件中包含的相同标头(使用默认编译器设置)只能为.m文件定义__OBJ__

答案 1 :(得分:0)

如果使用Objective C,那么基本上在该代码中它将导入这3个库

#import <foundation/foundation.h>
#import <uikit/uikit.h>
#import <coredata/coredata.h>

如果,除非有必要,否则不会导入它们。

答案 2 :(得分:0)

它们列在#endif之后作为提醒,因此它使代码更易于阅读。否则,你必须在上面查看#endif结束的内容。

答案 3 :(得分:0)

这样做的原因是这个代码仍然可以与可能想要使用该C文件中的功能的常规C代码兼容(至少这对我来说是这样的)。通过仅在定义OBJC时包含这些库,它确保在编译目标c而不是标准C时仅导入库。