文章目录
一、前言
今天继续讲LuatOS的开发,上一期简单说了一下如何移植LuatOS,相信很多朋友已经看过了,那么今天,我就开始讲C和Lua调用的部分教程。
二、闲谈C与Lua的调用
1、先来个中文文档
https://www.runoob.com/manual/lua53doc/contents.html
2、简介
Lua 使用一个虚拟栈来和C互传值,也就是说,C和Lua的数据交互是在栈上进行的。
无论何时 Lua 调用 C,被调用的函数都得到一个新的栈, 这个栈独立于 C 函数本身的栈,也独立于之前的 Lua 栈。 它里面包含了 Lua 传递给 C 函数的所有参数, 而 C 函数则把要返回的结果放入这个栈以返回给调用者 。(关键词:入栈,压栈)
栈:要是你没接触过,就当他是个先入后出的大袋子,你要做的就是往里面放东西和拿东西。
C和Lua的调用说大白话就是:在栈上操作。
3、常用函数
lua_State
:lua 虚拟机中的环境表、注册表、运行堆栈、虚拟机的上下文等数据。会在写函数的时候首先使用
常用判断函数:
lua_isboolean
: lua_isboolean (lua_State *L, int index); 当给定索引的值是一个布尔量时,返回 1 ,否则返回 0 。
lua_isinteger
: lua_isinteger (lua_State *L, int index); 当给定索引的值是一个整数时,返回 1 ,否则返回 0 。
lua_isnil
: lua_isnil (lua_State *L, int index); 当给定索引的值是 nil 时,返回 1 ,否则返回 0 。
lua_isnumber
: lua_isnumber (lua_State *L, int index); 当给定索引的值是一个数字,或是一个可转换为数字的字符串时,返回 1 ,否则返回 0 。
lua_isstring
: lua_isstring (lua_State *L, int index); 当给定索引的值是一个字符串或是一个数字( 数字总能转换成字符串)时,返回 1 ,否则返回 0 。
lua_istable
: lua_istable (lua_State *L, int index); 当给定索引的值是一张表时,返回 1 ,否则返回 0 。
常用检查函数:
luaL_checkinteger
: luaL_checkinteger (lua_State *L, int arg); 检查函数的第 arg 个参数是否是一个 整数(或是可以被转换为一个整数) 并以 lua_Integer 类型返回这个整数值。
luaL_checknumber
: luaL_checknumber (lua_State *L, int arg); 检查函数的第 arg 个参数是否是一个 数字,并返回这个数字。
luaL_