所以我正在阅读 c api lua 文档,我在这段代码中注意到:
lua_pushnil(L); /* first key */
while (lua_next(L, t) != 0) {
/* uses 'key' (at index -2) and 'value' (at index -1) */
printf("%s - %s\n",
lua_typename(L, lua_type(L, -2)),
lua_typename(L, lua_type(L, -1)));
/* removes 'value'; keeps 'key' for next iteration */
lua_pop(L, 1);
}
除了使用 -2 和 -1 作为堆栈索引的行之外,它看起来很正常
我尝试将它们改为正数,似乎对程序没有任何影响,那为什么他们会专门使用负数呢?为什么这不会导致编译器错误,我确定你不能使用带负数的无符号整数
我不知道它是否会做出任何改变,但我使用的是 c++ 而不是 c,所以也许这与它有关
根据文档:
为了方便起见,API 中的大多数查询操作不遵循严格的堆栈规则。相反,它们可以通过使用索引来引用堆栈中的任何元素:正索引表示绝对堆栈位置,从 1 开始作为堆栈底部; 负索引表示相对于栈顶的偏移量。更具体地说,如果栈有n个元素,那么索引1表示第一个元素(即最先压入栈的元素),索引n表示代表最后一个元素;索引-1也代表最后一个元素(即顶部的元素),索引-n代表第一个元素。