如何在#define中#import

时间:2017-10-03 21:28:16

标签: c++ objective-c xcode c-preprocessor

我正在围绕C ++库开发一个Objective-C包装器,其源代码我既无法控制也无法修改。我导入的标题会触发各种编译器警告,因此我开始执行以下操作:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wreserved-id-macro"
#pragma clang diagnostic ignored "-Wstrict-prototypes"
#import "dll.hpp"
#pragma clang diagnostic pop

这很有用,但是为了保持它DRY,我想为每个导入定义一个宏,并且内置忽略的警告编译指示(只有少数这样的标题)。

这样,在每个文件中我都可以在顶部进行这样的调用,并且我在每个标题的一个位置都有被忽略的警告。

ImportDllHpp()

然而,从#import内拨打#define并不容易。我已经非常接近了,使用this answer让pragma工作。但_Pragma是否有#import这样的函数或其他方法来实现它?

这是我到目前为止所做的:

#define _stringify(a) #a

#define ImportRarHpp() \
_Pragma( _stringify( clang diagnostic push ) ) \
_Pragma( _stringify( clang diagnostic ignored "-Wreserved-id-macro" ) ) \
_Pragma( _stringify( clang diagnostic ignored "-Wstrict-prototypes" ) ) \
#import "dll.hpp"
_Pragma( _stringify( clang diagnostic pop ) )

1 个答案:

答案 0 :(得分:2)

如果你能做到这一点,我会非常惊讶。

我建议最简单的解决方案是让您简单地定义一个名为my-dll.hpp的文件,其中包含

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wreserved-id-macro"
#pragma clang diagnostic ignored "-Wstrict-prototypes"
#import "dll.hpp"
#pragma clang diagnostic pop

这样,任何想要导入dll.hpp的人都只会#import "my-dll.hpp",而且会取消相应的警告。