关于PHPAPI ZEND_API TSRM_API宏的定义

在PHP源码中,咱们能够见到诸如PHPAPI ZEND_API TSRM_API等xxx_API(固然还有其余格式的)这样的宏函数

关于它们的定义都是相似于spa

#if defined(__GNUC__) && __GNUC__ >= 4
# define ZEND_API __attribute__ ((visibility("default")))
#else
# define ZEND_API
#endif

 

1、预约义__GNUC__宏code

    1 __GNUC__ 是gcc编译器编译代码时预约义的一个宏。须要针对gcc编写代码时, 能够使用该宏进行条件编译。blog

    2 __GNUC__ 的值表示gcc的版本。须要针对gcc特定版本编写代码时,也能够使用该宏进行条件编译。编译器

    3 __GNUC__ 的类型是“int”,该宏被扩展后, 获得的是整数字面值。能够经过仅预处理,查看宏扩展后的文本。源码

因此咱们知道ZEND_API定义为:it

若是编译器使用的是gcc且GNUC的版本大于等于4,则定义ZEND_API为 __attribute__ ((visibility("default")))编译

那__attribute__究竟是干吗的,有什么做用呢?class

查阅关于C的相关资料得出结论:gcc

__attribute__ ((visibility("default")))定义的函数都是可见的

 

详细的解释能够搜索相关内容

相关文章
相关标签/搜索