我正在围绕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 ) )
答案 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"
,而且会取消相应的警告。