Objective-C 中#import 和#include 之间有什么区别?有时您应该使用其中之一而不是另一个?是否已弃用?
我正在阅读以下教程:http://www.otierney.net/objective-c.html#preamble http://www.otierney.net/objective-c.html#preamble其中关于 #import 和 #include 的段落似乎自相矛盾,或者至少不清楚。
关于预处理器似乎有很多混乱。
当编译器看到一个#include
它会用包含的文件的内容替换该行,不问任何问题。
所以如果你有一个文件a.h
包含以下内容:
typedef int my_number;
和一个文件b.c
包含以下内容:
#include "a.h"
#include "a.h"
文件b.c
在编译之前将由预处理器翻译为
typedef int my_number;
typedef int my_number;
这将导致编译器错误,因为类型my_number
被定义了两次。尽管定义相同,但 C 语言不允许这样做。
由于标头经常在多个地方使用包括警卫通常在 C 中使用。看起来像这样:
#ifndef _a_h_included_
#define _a_h_included_
typedef int my_number;
#endif
文件b.c
预处理后仍然会两次包含标头的全部内容。但第二个实例将被忽略,因为宏_a_h_included_
已经被定义了。
这确实有效,但有两个缺点。首先,必须编写包含保护,并且每个标头中的宏名称必须不同。其次,编译器仍然需要查找头文件并在包含头文件时经常读取它。
Objective-C 有#import
预处理器指令(它也可用于带有某些编译器和选项的 C 和 C++ 代码)。这几乎与#include
,但它还在内部注释了哪个文件已被包含。这#import
仅当第一次遇到该行时,该行才会被指定文件的内容替换。此后每次都被忽略。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)