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函數返回值是怎麼返回的了其它類型返回值替換相似
相關文章
相關標籤/搜索