如何抑制每个文件的-Wno协议

iKi*_*KiR 3 xcode gcc clang gcc-warning ios

我实现了Objective-C Protocol,它将所有协议的方法转发给另一个目标.Everething很好,除了编译器警告这个类没有实现协议的方法.我正在尝试使用#pragma diagnostic来抑制此警告:

//Header file
@protocol A
-(void)test;
@end

@interface AImpl : NSObject<A> {
    id<A> myItems;
}
@end

//Implementation file:
#pragma GCC diagnostic push
#pragma clang diagnostic push

#pragma GCC diagnostic ignored "-Wno-protocol"
#pragma clang diagnostic ignored "-Wno-protocol"

@implementation AImpl
- (void)forwardInvocation:(NSInvocation *)invocation {
SEL selector = [invocation selector];

    if ([myItems respondsToSelector:selector]) {
    [invocation invokeWithTarget:myItems];
} else {
    [super forwardInvocation:invocation];
}
}
@end

#pragma clang diagnostic pop
#pragma GCC diagnostic pop
Run Code Online (Sandbox Code Playgroud)

但编译器警告"未知警告组'-Wno-protocol'"

jus*_*tin 8

你有3个直接方法:

1)你可以这样做:

#pragma GCC diagnostic ignored "-Wprotocol"
#pragma clang diagnostic ignored "-Wprotocol"
Run Code Online (Sandbox Code Playgroud)

指定要使用pragma禁用的组,而不是使用编译器标志来设置/更改.

2)或者您可以像这样更正问题(假设您没有声明根类):

@interface AImpl : NSObject<A>
{
  id<NSObject,A> myItems;
}
@end
Run Code Online (Sandbox Code Playgroud)

3) 或者你可以在Xcode的Project> Target> Build Phases> Compile Sources> Compiler Flags ="-Wno-protocol"中基于每个文件指定设置

我会选择#2.