首先#pragma在本質上是聲明,經常使用的功能就是註釋,尤爲是給Code分段註釋;並且它還有另外一個強大的功能是處理編譯器警告,但卻沒有上一個功能用的那麼多。spa
clang diagnostic 是#pragma 第一個經常使用命令:指針
#pragma clang diagnostic pushcode
#pragma clang diagnostic ignored "-相關命令"ip
// 你本身的代碼ci
#pragma clang diagnostic popget
常見的用法編譯器
1. 方法棄用告警string
1
2
3
4
|
#pragma clang diagnostic push
#pragma clang diagnostic ignored
"-Wincompatible-pointer-types"
//
#pragma clang diagnostic pop
|
2. 不兼容指針類型it
1
2
3
4
|
#pragma clang diagnostic push
#pragma clang diagnostic ignored
"-Wincompatible-pointer-types"
//
#pragma clang diagnostic pop
|
3. 循環引用io
1
2
3
4
5
6
7
|
// 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. 未使用變量
1
2
3
4
|
#pragma clang diagnostic push
#pragma clang diagnostic ignored
"-Wunused-variable"
int
a;
#pragma clang diagnostic pop
|
5. 未使用default
1
2
3
4
5
6
7
8
9
10
11
12
|
#pragma clang diagnostic push
#pragma clang diagnostic ignored
"-Wcovered-switch-default"
// switch (style) {
// case UITableViewCellStyleDefault:
// case UITableViewCellStyleValue1:
// case UITableViewCellStyleValue2:
// case UITableViewCellStyleSubtitle:
// // ...
// default:
// return;
// }
#pragma clang diagnostic pop
|
參考連接: