Lua api(一)

前言#

最近看了一下Lua与C++的交互,发现只是写lua而不了解lua与C++相互调用的过程,确实是一件苦恼的事情,所以我决定先熟悉一下lua的api,不需要多,每天学习一两个就可以。

内容#


lua_gettop##

  • 原型:int lua_gettop (lua_State *L);
  • 解释:返回栈顶元素的索引。 因为索引是从 1 开始编号的, 所以这个结果等于堆栈上的元素个数(因此返回 0 表示堆栈为空)。

lua_settop##

  • 原型:void lua_settop (lua_State *L, int index);
  • 解释:参数允许传入任何可接受的索引以及 0 。 它将把堆栈的栈顶设为这个索引。 如果新的栈顶比原来的大,超出部分的新元素将被填为 nil 。 如果 index 为 0 ,把栈上所有元素移除。

Usage##

  • c使用lua api代码:
void test_api_gettop()
{
    lua_State *L = lua_open();
    printf("begininit : stack hight = %d\n", lua_gettop(L));

    lua_pushinteger(L,6);
    lua_pushinteger(L,6);
    printf("pushargvs : stack hight = %d\n", lua_gettop(L));

    lua_settop(L, 0);
    printf("settopfun : stack hight = %d\n", lua_gettop(L));
}
  • 结果
api(一).png

结论#

  • 这两个api通常是成对出现的,一个是获得栈内元素个数,一个是设置栈内元素个数
  • 在实际使用过程中这两个一般也是不分离的,比如:在调用lua函数前,需要先获得栈内元素个数保存在变量中,然后使用lua_pcall调用lua函数,最后再将栈内元素个数设置成原来的数量保证函数执行前后栈内元素不变(当然,一般情况下执行完lua函数后参数和函数都被弹出栈了,栈内元素数量应该是不变的)。

你可能感兴趣的:(Lua api(一))