zoukankan      html  css  js  c++  java
  • php开发扩展之RETURN_LONG宏替换

    php扩展函数返回值RETURN_LONG(123) 宏替换过程如下:
    
    替换之前:
    RETURN_LONG(123);
    -------------------------
    第1次替换:
    { RETVAL_LONG(123); return; }
    -------------------------
    第2次替换:
    { ZVAL_LONG(return_value, 123); return; }
    -------------------------
    第3次替换:
    { 
        {
            zval *__return_value = (return_value);            
            Z_LVAL_P(__return_value) = 123;            
            Z_TYPE_P(__return_value) = IS_LONG;    
        }; 
        return; 
    }
    -------------------------
    第4次替换:
    { 
        {
            zval *__return_value = (return_value);            
            Z_LVAL(*__return_value) = 123;
            Z_TYPE(*__return_value) = IS_LONG;    
        }; 
        return; 
    }
    -------------------------
    第5次替换:
    { 
        {
            zval *__return_value = (return_value);
            (*__return_value).value.lval = 123;
            (*__return_value).type = IS_LONG;
        }; 
        return; 
    }
    
    替换完之后 RETURN_LONG(123);等价于第5次替换结果,返回值直接定义为第5次结果也是可以的,如果你不嫌麻烦的话。
    看替换之后的结果 return_value 与函数名替换完之后里面的参数 return_value 就对应起来的,到这一步就明白的
    php函数返回值是怎么返回的了

    其它类型返回值替换类似
    ——在青春的路上,我们与你携手共进!
  • 相关阅读:
    数据结构之c++感悟
    常见linux系统中RPM包的通用命名规则
    scripts
    http
    iscsi
    RHCE认证经典考题
    数据库
    配置空客户端邮件
    配置nfs服务
    Python版本的7大排序
  • 原文地址:https://www.cnblogs.com/sajanray/p/8204377.html
Copyright © 2011-2022 走看看