gpt4 book ai didi

lua - 只要堆栈保持平衡,是否可以修改堆栈值?

转载 作者:行者123 更新时间:2023-12-04 17:01:53 29 4
gpt4 key购买 nike

众所周知,保持堆栈平衡是一种良好的编程习惯。我想知道的是,是否允许我在从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在平衡堆栈的情况下返回就没关系吗?

最佳答案

堆栈值是被调用的C函数的属性。您可以与他们一起做任何您想做的事。外部的唯一影响是该函数返回的值。

从Lua调用的C函数不需要保持堆栈平衡,也就是说,其内容或条目数量与输入时相同。

关于lua - 只要堆栈保持平衡,是否可以修改堆栈值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47803779/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com