首页 > 代码库 > C语言中调用Lua
C语言中调用Lua
C语言和Lua天生有两大隔阂:
一、C语言是静态数据类型,Lua是动态数据类型
二、C语言需要程序员管理内存,Lua自动管理内存
为了跨越世俗走到一起,肯定需要解决方案。
解决第一点看上去比较容易,C语言中有union。
可是第二点呢?万一C语言正引用着Lua的一个值,Lua自动释放了怎么办?
所以就有了一种比union更好的解决方案:栈。
这是一个虚拟的栈,是沟通两者的桥梁,两者的数据交换全都通过这个栈进行,这样只要不pop,Lua就不会自动释放,而什么时候pop由C语言说了算。
下面是一段喜闻乐见的示例。
由于新建的cpp文件,所以需要extern "C" 。
1 #include <stdio.h> 2 extern "C" { 3 #include <lua.h> 4 #include <lauxlib.h> 5 #include <lualib.h> 6 } 7 8 //调用lua中的add函数 9 int call_lua_add(lua_State *L)10 {11 lua_getglobal(L, "add"); //获取add函数12 lua_pushnumber(L, 123); //第一个操作数入栈13 lua_pushnumber(L, 456); //第二个操作数入栈14 lua_pcall(L, 2, 1, 0); //调用函数,2个参数,1个返回值15 int sum = (int)lua_tonumber(L, -1); //获取栈顶元素(结果)16 lua_pop(L, 1); //栈顶元素出栈17 return sum;18 }19 20 int main()21 {22 lua_State *L = luaL_newstate(); //新建lua解释器23 luaL_openlibs(L); //载入lua所有函数库24 luaL_dofile(L, "Test.lua"); //执行"Test.lua"文件中的代码25 printf("%d\n", call_lua_add(L));26 lua_close(L); //释放27 return 0;28 }
下面是Test.lua文件中的内容:
1 function add(x, y)2 return x + y;3 end
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。