C 卢普考尔在这里干什么?
我正在努力学习lua,我似乎被困在这里了 由于某些原因,下面的代码实际上没有运行lua文件C 卢普考尔在这里干什么?,c,lua,C,Lua,我正在努力学习lua,我似乎被困在这里了 由于某些原因,下面的代码实际上没有运行lua文件 int main() { lua_State* L = luaL_newstate(); luaL_openlibs(L); int width = 0; int height = 0; if(!luaL_loadfile(L, "./src/luaconf.lua") || !lua_pcall(L, 0, 0, 0)) {
int main()
{
lua_State* L = luaL_newstate();
luaL_openlibs(L);
int width = 0;
int height = 0;
if(!luaL_loadfile(L, "./src/luaconf.lua") || !lua_pcall(L, 0, 0, 0))
{
lua_getglobal(L, "width");
lua_getglobal(L, "height");
if(!lua_isnumber(L, -2))
{
luaL_error(L, "width isn't a number");
}
else
{
width = lua_tointeger(L, -2);
}
if(!lua_isnumber(L, -1))
{
luaL_error(L, "height isn't a number");
}
else
{
height = lua_tointeger(L, -1);
}
}
printf("%i x %i", width, height);
return 0;
}
我知道如果我将if(!luaL_loadfile(L,“./src/luaconf.lua”)| |!lua_pcall(L,0,0,0)
更改为if(luaL_dofile(L,“./src/luaconf.lua”)
它会工作,但我想知道上面的代码为什么不工作
lua_pcall不应该运行lua代码吗?如果不是,为什么
卢阿
width = 500
height = 40
请注意,在代码中:
if(!luaL_loadfile(L, "./src/luaconf.lua") || !lua_pcall(L, 0, 0, 0))
如果LUA_loadfile
成功,它将返回值为0
的LUA_OK
,因此|
的左操作数计算为1
,根据短路情况,LUA_pcall
将不会执行
所以你想要的可能是:
if ((luaL_loadfile(L, "./src/luaconf.lua") || lua_pcall(L, 0, 0, 0))
{
//error handle
}
else
{
//normal handle
}
我只是注意到你有不同的“如果陈述”在文档和代码中,我的答案是基于代码的。如果不是这样,请对我的答案进行评论。是的,对此表示抱歉。小错误。代码是正确的,感谢您的回答:如果是这样的话,那么使用
&&
而不是|
会更好吗?@code思考者如果您选择否定每一个选项用!
表示,那么是的,您应该使用&&
。