大佬教程收集整理的这篇文章主要介绍了关于#pragma 和 _pragma,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这两个都是出自于c/c++ 的 ,其中#pragma 是预处理指令(preProcess directive ) ,#pragma是用来向编译器传达语言标准以外的一些信息。 ;
_Pragma操作符,该操作符具有与 #pragma 指令相同的功能 _Pragma(token-String) 相比预处理指令#pragma,_Pragma操作符可用于宏定义中的内联。 #pragma 指令不能用于宏定义中,因为编译器会将指令中的数字符号(“#”)解释为字符串化运算符 (#)。 由于_Pragma是一个操作符,因此可以用在一些宏中,我们可以看看下面这个例子:
#define ArgumentToString(macro) #macro
#define ClangWarningConcat(warning_Name) ArgumentToString(clang diagnostic ignored warning_Name)
/// 参数可直接传入 clang 的 warning 名,w
#define BeginIgnoreClangWarning(warningName) _Pragma("clang diagnostic push") _Pragma(ClangWarningConcat(#warningName))
#define EndIgnoreClangWarning _Pragma("clang diagnostic pop")
#define BeginIgnorePerformSELEctorLeaksWarning BeginIgnoreClangWarning(-Warc-performSELEctor-leaks)
#define EndIgnorePerformSELEctorLeaksWarning EndIgnoreClangWarning
_Pragma("clang diagnostic push")
_Pragma("clang diagnostic ignored "-Warc-performSELEctor-leaks"")
if( [self.delegate respondsToSELEctor:@SELEctor(next:)]){
[ self.delegate performSELEctor:@SELEctor(next:) withObject:obj ] ;
}
_Pragma("clang diagnostic pop")
//上面代码可以替换成
BeginIgnorePerformSELEctorLeaksWarning
if( [self.delegate respondsToSELEctor:@SELEctor(next:)]){
[ self.delegate performSELEctor:@SELEctor(next:) withObject:obj ] ;
}
EndIgnorePerformSELEctorLeaksWarning
上面这个例子如果 self 没实现 next:方法 ,且没有对应的 代理, 则会提示 没有相关方法 , 通过使用_pragma 就能取消提示
相关参数 可查看 :https://clang.llvm.org/docs/DiagnosticsReference.html#wpragma-clang-attribute
关于提示:
#error "this is en Error"
#waring "this a warn message"
以上是大佬教程为你收集整理的关于#pragma 和 _pragma全部内容,希望文章能够帮你解决关于#pragma 和 _pragma所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。