每个人都知道保持堆栈平衡是一种很好的编程习惯。但我想知道的是,我是否可以修改从Lua脚本调用的C函数中的堆栈值?请考虑以下代码:
int myfunc(lua_State *L)
{
int arg1 = luaL_checkinteger(L, 1);
int arg2 = luaL_checkinteger(L, 2);
// pop arg 2
lua_pop(L, 1);
// this is to be our return value
lua_newtable(L);
...do complicated stuff...
// restore second parameter but set it to nil for convenience's sake
lua_pushnil(L);
lua_insert(L, 2);
// return our table
return 1;
}
所以上面的代码用nil替换第二个参数。这是允许的还是我必须恢复原始值,即我必须这样做
lua_pushinteger(L, arg2);
而不是
lua_pushnil(L);
?或者只要myfunc
返回并且堆栈平衡,这不重要吗?
答案 0 :(得分:3)
堆栈值是被调用的C函数的属性。你可以随心所欲地做任何事情。对外部的唯一影响是函数返回的值。
从Lua调用的C函数不需要保持堆栈平衡,即使用相同的内容或项目数量。