关于调用 Lua 函数时,返回值是否需要弹出栈的问题

  1. 一个 Lua 函数返回两个数字
  2. C++ 调用了这个 Lua 函数 foo
  3. 我不确定是否需要弹出函数 foo 的返回值(_lua_pop(L,2);_).
  4. 请告诉我该怎么做和为什么。非常感谢。

像下面这样的部分代码:

// Lua 函数
function foo(a, b)
    return a+b, a-b;
end

// C++

lua_getglobal(L,"foo"); // 推入函数
lua_pushnumber(L,1);    // 推入参数 1
lua_pushnumber(L,2);    // 推入参数 2

error=lua_pcall(L, 2, 2, 0);

if (!error) {
    printf("return:%s\n",lua_tostring(L,-1));
    printf("return:%s\n",lua_tostring(L,-2));
    // 是否需要弹出
    lua_pop(L,2);
}
点赞
用户8373051
用户8373051

你应该一直尝试保持堆栈处于已知状态,以防你使用相同的lua_State调用更多函数。如果你让结果留在堆栈中并进行更多的调用,你最终会填满可用的堆栈空间。

所以,在使用它们的值后,你应该将堆栈上的2个结果弹出。

2017-09-05 08:28:49