lua源码解析三,lua_cpcall等一系列函数调用过程中的封装步骤各有什么作用

这篇博客详细解析了lua源码中与调用相关的函数,包括luaB_开头的基础库函数、lua_pcall、lua_cpcall和lua_call。文章指出lua_pcall和lua_cpcall分别用于调用lua脚本定义的函数和C语言编写的函数,并深入探讨了它们如何通过luaD_pcall和luaD_call等底层函数进行调用处理。luaD_call作为所有函数调用的最终归宿,负责执行lua函数或C函数。通过层次分析,帮助读者理解lua调用机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在追踪lua源码过程中,有一堆的关于call的函数,令人眼花缭乱,如果不稍作整理,就很难掌握什么情况下调用哪个call函数,以下是列举的几个call相关函数

type void (*Pfunc)(lua_State*L, void* ud);

void (lua_call)(lua_State*L, int nargs, int nresults);
int (lua_pcall)(lua_State*L, int nargs, int nresults, int errfunc);
int (lua_cpcall)(lua_State*L, lua_CFunction func, void* ud);
int (luaB_pcall)(lua_State*L);
int (luaB_xpcall)(lua_State*L);
int (luaD_callhook)(lua_State*L, int event, int line);
int (luaD_call)(lua_State*L, StkId func, int nResults);
int (luaD_precall)(lua_State*L, StkId func, int nResults);
int (luaD_pcall)(lua_State*L, Pfunc func, void* u, ptrdiff_t oldtop, ptrdff_t ef);
int (luaD_poscall)(lua_State*L, StkId firstResult);

int (luaD_rawrunpretected)(lua_State*L, Pfunc f, void* ud);

 

确实是眼花缭乱对吧,我们就围绕这几个函数做进一步追踪,慢慢理解。

一 、luaB_开头的,位于lua的baselib,这个属于基础库,注册于_G表中,可以说是给脚本使用的函数,C++里面不会直接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值