为什么这个程序专门使用负无符号整数?

问题描述 投票:0回答:1

所以我正在阅读 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,所以也许这与它有关

c++ c lua-api lua-c++-connection
1个回答
0
投票

根据文档

为了方便起见,API 中的大多数查询操作不遵循严格的堆栈规则。相反,它们可以通过使用索引来引用堆栈中的任何元素:正索引表示绝对堆栈位置,从 1 开始作为堆栈底部; 负索引表示相对于栈顶的偏移量。更具体地说,如果栈有n个元素,那么索引1表示第一个元素(即最先压入栈的元素),索引n表示代表最后一个元素;索引-1也代表最后一个元素(即顶部的元素),索引-n代表第一个元素。

© www.soinside.com 2019 - 2024. All rights reserved.