Lua源码揭秘(五)绑定Lua之前你需要知道的

本文详细介绍了Lua的C API,包括状态管理、栈操作、类型检测、值转换、表操作、调用与加载函数等核心功能。通过lapi.c和lauxlib.c中的函数,如lua_checkstack、lua_pushvalue、lua_gettable等,理解如何在C/C++等语言中与Lua交互。
摘要由CSDN通过智能技术生成

lapi.c和lauxlib.c里包含了大部分的lua的capi。所谓capi是指在c形式的api接口,可以在c/c++/c#/…中可以调用到的api,但是lua中并不一定有对应的方法。ldebug.c里有一些调试用的capi(后续文章会介绍)。另外一些capi,便是打开lua库函数的capi,在lualib.h里集中声明。

lapi.c

基础的capi。

state相关

lua_checkstatck

检查栈的深度,如果没有超过最大深度便会扩充栈,否则返回0(交给上层处理)。

lua_xmove

将n个对象从一个状态(协程)移动到另一个状态(协程)上。

lua_setlevel

设置状态(协程)的调用层次,用于resume。

lua_atpanic

设置状态(协程)的内部错误处理方法。

lua_newthread

新建一个状态(协程)。

stack相关

lua_gettop

获取栈顶,一般用于检查参数个数。

lua_settop

设置栈顶,一般用于设置返回值个数。之前的文章在编写库函数的时候,会返回一个返回值数量,这个数量要与当前函数栈的深度一致,否则会出问题。

lua_remove

在函数栈的某个位置上移除对象。

lua_insert

在函数栈的某个位置上插入对象。

lua_replace

在函数栈的某个位置上替换成当前栈顶的对象。

lua_pushvalue

最常用的,在栈顶上压入对象,与之对应的是lua_pop,实际上就是lua_settop(宏定义)。

type相关

lua_type

类型:0-nil,1-bool,2-lightuserdata,3-number,4-string,5-table,6-function,7-userdata,8-thread。-1代表啥也没有(不是nil)。

lua_typename

类型名,lua里的type方法实际上调用了上面二者。

lua_iscfunction

是否是c方法。

lua_is

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值