Lua C接口API 1

2016-11-28  本文已影响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 之间的操作由栈来传递数据,操作的时候,一定要注意栈顶是否溢出!!

上一篇下一篇

猜你喜欢

热点阅读