#pragma预处理指令
在C/C++标准中,#pragma是一条预处理的指令。
-
#pragma mark - messageopt
整理代码,#pragma mark - 用来提供类似注释功能,同时也方便在代码区上方的导航条中快速定位自己的方法。
-
#pragma clang
clang是诊断设置,是#pragma的常用命令。
-
#pragma clang diagnostic ignored "-相关命令"
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-相关命令"
//自己的代码
#pragma clang diagnostic pop例子:忽略-Warc-performSelector-leaks警告
#pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks" [wTarget performSelector:sel withObject:nil]; #pragma clang diagnostic pop
例子:忽略循环引用警告
#pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-retain-cycles" self.completionBlock = ^ { ... }; #pragma clang diagnostic pop
在开发过程中,大部分警告都不应该被忽略,因为大部分真的是警告。
-
-
#pragma message "message"
强制警告,与#warning message在效果上是一致的。顺便提一下#error message可以强制编译失败。
_Pragma操作符
_Pragma操作符具有与#pragma指令相同的功能。
相比预处理指令#pragma,_Pragma操作符可用于宏定义中的内联。#pragma指令不能用于宏定义中,因为编译器会将指令中的数字符号("#")解释为字符串化运算符(#)。
例子:宏定义忽略-Warc-performSelector-leaks警告
#define PERFORMSELECTOR(expression) \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
expression \
_Pragma("clang diagnostic pop") \
// 调用
PERFORMSELECTOR([wTarget performSelector:sel withObject:nil];);
网友评论