首先, #pragma 本質上也是聲明,通常經常使用的功能就是打註釋、尤爲是分段註釋
html
可是#pragma 另一個強大的功能就是處理編譯器警告,用的時候可能就沒上一個
spa
功能用的那麼多,在代碼中處理警告倒是極其高效的方法。
指針
其中 clang diagnostic 即是#pragma 第一個功能經常使用的命令,步驟以下
code
|
#pragma clang diagnostic push htm #pragma clang diagnostic ignored "-相關命令" ip // 你本身的代碼 ci #pragma clang diagnostic pop get |
常見用法
編譯器
1.方法棄用告警
io
|
#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" [TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]]; #pragma clang diagnostic pop |
2.不兼容指針類型
|
#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wincompatible-pointer-types" // #pragma clang diagnostic pop |
3.循環引用
|
// completionBlock is manually nilled out in AFURLConnectionOperation to break the retain cycle. #pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-retain-cycles" self.completionBlock = ^ { ... }; #pragma clang diagnostic pop |
4.未使用變量
|
#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunused-variable" int a; #pragma clang diagnostic pop |
#pargma 用法詳情:
http://nshipster.cn/pragma/
http://nshipster.com/clang-diagnostics/
相關的命令列表
http://fuckingclangwarnings.com/
進階:
http://clang.llvm.org/docs/UsersManual.html#diagnostics_pragmas