zoukankan      html  css  js  c++  java
  • 关于PHPAPI ZEND_API TSRM_API宏的定义

    在PHP源码中,我们可以见到诸如PHPAPI ZEND_API TSRM_API等xxx_API(当然还有其他格式的)这样的宏

    关于它们的定义都是类似于

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

    一、预定义__GNUC__宏

        1 __GNUC__ 是gcc编译器编译代码时预定义的一个宏。需要针对gcc编写代码时, 可以使用该宏进行条件编译。

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

        3 __GNUC__ 的类型是“int”,该宏被扩展后, 得到的是整数字面值。可以通过仅预处理,查看宏扩展后的文本。

    所以我们知道ZEND_API定义为:

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

    那__attribute__到底是干嘛的,有什么作用呢?

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

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

    详细的解释可以搜索相关内容

  • 相关阅读:
    JSR303实现数据校验案例
    maven安装和相关配置
    mybatis分页插件使用案例
    分页查询案例
    ssm整合相关配置
    配置文件没有按照maven约定存放解决方法
    git常用命令和基本使用
    mybatis配置二级缓存
    Angular第三方UI组件库------ionic
    Angular路由知识点
  • 原文地址:https://www.cnblogs.com/xiaozong/p/6134674.html
Copyright © 2011-2022 走看看