루아 C API를 사용하는 데 문제가 있습니다. pcall (C API 함수)이 실패하면 오류가 스택에 푸시됩니다. lua_tostring
은 스택에 오류를 표시하지만 lua_gettop
쇼에 스택이 비어 있다고 표시됩니다.루아 C API : pcall 오류 후 빈 스택
#include <lua5.2/lauxlib.h>
#include <lua5.2/lua.h>
#include <lua5.2/lualib.h>
int main()
{
lua_State *L = luaL_newstate();
lua_pcall(L, 0, 0, 0);
printf("%d\n", lua_gettop(L)); // outputs 0, indicating empty stack
printf("%s\n", lua_tostring(L, -1)); // outputs "attempt to call a nil value", indicating non-empty stack
}
컴파일과 : 전화 시도 : GCC main.c의`PKG-설정은 PKG-구성 --libs이
이 프로그램 디스플레이를 lua5.2``lua5.2` --cflags nil 값
lua_gettop (L) 스택 크기를 반환합니다. 여기에 나는 0이 생깁니다. 빈 스택에서 문자열을 얻으려면 어떻게해야합니까?
동작은 5.1 버전과 동일합니다.
왜 그가 전화를 할 수 없다고 생각하는지 모르겠다. –
나는 당신이 그 질문을 오해 한 것 같아. 그는'luaL_newstate' 이후에 스택이 비어 있다는 것을 알고 있고 스택을 호출하기 위해 스택에 함수를 푸시해야한다는 것을 알고있다. 그는 pcall로 하여금 의도적으로 오류를 발생 시키도록 강요하고있다. 질문은 왜 pcall *이 오류 메시지를 푸시 한 후 스택 맨이 여전히 0인지 *? 그의 출력은 스택에 에러 메시지가 있다는 것을 보여 주지만 (lil_gettop은 0을 반환한다. 매뉴얼에 따르면 * 빈 스택 *을 나타낸다. (http : // www .lua.org/manual/5.1/manual.html # lua_gettop). – Mud
@Mud, Lua API는 손을 잡지 않습니다.쓰레기를 버리면 쓰레기가 나옵니다. 'lua_pcall'은 호출 될 스택에 함수가 있다고 가정합니다. – lhf