程序笔记   发布时间:2022-07-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了关于#pragma 和 _pragma大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

首先要明确 #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,请注明来意。