在从Lua调用的C++中,lua_type(L,0)返回9,没有记录

Val*_*ond 7 c++ lua

我在我的(C++)游戏中使用Lua作为脚本语言.在一个调用中(从lua到c ++)我检查堆栈顶部的类型:

if(lua_type(L, (0)) == LUA_TSTRING)
Run Code Online (Sandbox Code Playgroud)

但有时lua_type(L,(0))返回9.

我似乎无法找到任何引用(返回值应介于-1和8之间或LUA_TNONE,LUA_TNIL,... LUA_TTHREAD).

发生了什么?

lhf*_*lhf 5

堆栈的顶部是索引-1,而不是0.

永远不能将0用作访问堆栈的索引:

(注意0绝不是可接受的索引.)

§4.3 -有效和可接受指数在参考手册中.

Lua中的C API没有程序员的手:

与大多数C库一样,Lua API函数不检查其参数的有效性或一致性.但是,您可以通过使用定义的宏LUA_USE_APICHECK编译Lua来更改此行为.[ §4 ]

  • 虽然我同意这并不能解释确切的返回值,一旦你遇到未定义的行为,任何事情都是可以接受的,并且`lua_type`被明确记录为被定义为"可接受的ind [冰]"或("有效"或"非"有效(但可接受)ind [冰]". (2认同)
  • 这是"可接受"和"不可接受"指数之间的区别.对于所有"可接受的"指数(有效或无效),定义了返回值(在lua 5.3中).使用任何其他值是UB. (2认同)