美文网首页
Lua C接口API 1

Lua C接口API 1

作者: 小小小码农 | 来源:发表于2016-11-28 22:01 被阅读98次

    最近工作中用到了Lua作为脚本语言由C/C++宿主语言调用,因为之前没用了解过Lua,在使用过程中遇到不少不懂得地方,因此决定花一段时间好好了解下Lua与C交互的API使用方式,本篇文章为第一篇。

    前言

    Lua 使用一个虚拟栈来和 C 互传值。栈上每一个元素都是一个 Lua 值。(nil,数字,字符串,等等)。无论何时Lua调用C,被调用的函数都得到一个新的栈,这个栈独立于 C 函数本身的栈,也独立于之前的 Lua 栈。它里面包含了 Lua 传递给 C 函数的所有参数,而 C 函数则把要返回的结果放入这个栈以返回给调用者。

    Lua 栈可以使用索引来指向栈上得任何元素:正的索引是栈上得绝对位置(从1开始);负的索引则从栈顶开始的偏移量。

    函数

    获取栈顶索引

    int lua_gettop (lua_State *L);
    

    作用:返回栈顶元素的索引。因为索引是从1开始,所以这个结果等同于栈上得元素个数(返回0表示堆栈为空)

    设置栈顶索引

    void lua_settop (lua_State *L, int index);
    

    作用:它将栈顶的索引设为这个索引,如果新的栈顶索引比原来大,超出部分的元素会被填为nil。如果新索引为0,则移除所有栈元素。

    示例

    C 使用 Lua API

    #include <lua.h>
    #include <lauxlib.h>
    #include <lualib.h>
    #include <stdio.h>
    
    
    int main(int argc, char *argv[])
    {
        lua_State *L = lua_open();
        printf("begininit : stack top = %d\n", lua_gettop(L));
    
        lua_pushnumber(L, 5);
        lua_pushnumber(L, 4);
        printf("pushargvs : stack top = %d\n", lua_gettop(L));
    
        lua_settop(L, 1);
        printf("settopfun : stack top = %d\n", lua_gettop(L));
        lua_settop(L, 0);
        printf("settopfun : stack top = %d\n", lua_gettop(L));
    
        return 0;
    }
    

    编译执行输出为:

    begininit : stack top = 0
    pushargvs : stack top = 2
    settopfun : stack top = 1
    settopfun : stack top = 0

    总结

    Lua 与 C 之间的操作由栈来传递数据,操作的时候,一定要注意栈顶是否溢出!!

    相关文章

      网友评论

          本文标题:Lua C接口API 1

          本文链接:https://www.haomeiwen.com/subject/yqxapttx.html