我已经阅读了一些关于预处理器指令的内容,并且我已经看到#import 在 C 程序中被使用了几次。我不确定它们之间有什么区别,有些网站说#include 仅用于头文件而#import 在 Java 中使用较多,在 C 中已弃用。
如果是这样,为什么有些程序仍然使用#import,它与#include 究竟有何不同?此外,我在我的一些 C 程序中使用了#import,它似乎工作正常并且与#include 做同样的事情。
最佳答案
这在 Gnu CPP(C 预处理器)手册中有很好的解释,尽管在 clang 中的行为是相同的(可能还有其他 C 编译器,但不是 MSVC):
The problem .简介:您通常不希望将相同的 header 两次包含到单个翻译单元中,因为这会导致重复声明,这是一个错误。但是,由于包含的文件本身可能想要包含其他文件,因此很难避免。
Some non-standard solutions (包括
#import
)。摘要:including 文件中的#import
和included 文件中的#pragma once
都可以防止重复包含。但是#pragma once
是一个更好的解决方案,因为包含程序不需要知道是否可以接受重复包含。
链接文档将 #import
称为“不推荐使用的扩展”,这是描述从来不属于任何标准 C 版本的功能的一种稍微奇怪的方式。但这并非完全没有意义:许多预处理器实现确实允许 #import
(这是 Objective-C 的一个特性),因此它是一个常见的扩展。称其为已弃用是一种说法,即该扩展永远将成为任何 C 标准的一部分,无论实现有多广泛。
如果你想使用扩展,使用#pragma once
;这也可能不会出现在未来的标准中,但是为给定的头文件更改它只需要在一个地方进行更改,而不是在包含头文件的每个文件中进行更改。 C++ 甚至 C 都可能在某个时候开发出某种模块特性,最终将允许包含保护被替换。
关于c - C中的#import和#include有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39280248/