__has_feature详解

在iOS开发中总能看见__has_feature宏,最常见的例如__has_feature(objc_arc),表示支持自动引用计数机制(ARC),类似的还有objc_arc_weakobjc_arc_fields
__has_feature在Clang文档中的定义是这样的

__has_feature and __has_extension
These function-like macros take a single identifier argument that is the name of a feature. __has_feature evaluates to 1 if the feature is both supported by Clang and standardized in the current language standard or 0 if not (but see below), while __has_extension evaluates to 1 if the feature is supported by Clang in the current language (either as a language extension or a standard language feature) or 0 if not. They can be used like this:

大致的意思是通过给定的值,判断编译器是否支持该特性
类似的特性检测宏还有__has_builtin__has_attribute等,他们都属于Feature Checking Macros
类似的还有Include File Checking Macros大类的宏定义,用于检测是否包含文件,常见的有 __has_include

Clang Language Extensions文档连接

__has_feature支持哪些参数,可以看一下Clang源码PPMacroExpansion.cpp文件中的HasFeature方法,在文件的855行到1005行,方法再结合文档,基本可以熟练的使用这个宏了

PPMacroExpansion.cpp文件代码连接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 通过阅读别人的优秀源码,你会发现别人的开源API设计中,有一些宏你是经常忽略的,或者你不知道的。通过这些宏,...
    gitKong阅读 5,304评论 5 41
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,871评论 0 10
  • 机械心,在一所普通的大学就读,大四学生,大三结束后就开始往职场奔跑。 为什么她给自己取名为机械心,我想,她不想要那...
    yi凝阅读 658评论 2 18
  • 会有人问过你吧,“爸妈离婚了,你跟谁走啊?” 我苦思冥想过,他们缺一不可啊,又或是想怎么可能,他们不会离婚的,这么...
    李十里阅读 130评论 0 0
  • 《不完美女孩》周冬雨 “这不完美的我,你总当作宝贝,你给我的爱也许不完美,但却最美。” 今天又重温了一下顾西爵的《...
    VAN_Z阅读 248评论 0 0

友情链接更多精彩内容