如何确定 Xcode 是否支持模块?

Jas*_*lls 6 xcode module objective-c

当我启用 -Weverything 自定义编译器标志并且 Xcode 支持模块时,它告诉我切换到使用模块 - 所以我改变了这种类型的东西:

#import <Foundation/Foundation.h>
Run Code Online (Sandbox Code Playgroud)

对此:

@import Foundation;
Run Code Online (Sandbox Code Playgroud)

...一切都很好,直到有人稍后将我的一个类导入到他们未启用模块的遗留项目中,此时他们必须将 @import 恢复为 #import。

我的问题是:是否可以将它们包装在某种预处理器宏中以在编译时挑选出正确的宏?

我希望的例子:

#ifdef MODULES_SUPPORTED
    @import Foundation;
#else
    #import <Foundation/Foundation.h>
#endif
Run Code Online (Sandbox Code Playgroud)

谢谢

杰斯

zim*_*zim 5

这是一个老问题,但也需要知道如何做到这一点。这是一种方法:

#ifdef __has_feature(modules)
    @import Foundation;
#else
    #import <Foundation/Foundation.h>
#endif
Run Code Online (Sandbox Code Playgroud)

参考:CLANG 语言扩展