我有以下代码:
lua_getglobal(L, "lgd");
lua_getfield(L, -1, "value_pos_x");
cr->value_pos_x = lua_tointeger(L, -1);
if (!lua_isinteger(L, -1))
printf("value_pos_x allows only numbers;");
lua_getfield(L, -2, "value_pos_y");
cr->value_pos_y = lua_tointeger(L, -1);
if (!lua_isinteger(L, -1))
printf("value_pos_y allows only numbers;");
lua_getfield(L, -3, "time");
cr->time = lua_tointeger(L, -1);
if (!lua_isinteger(L, -1))
printf("time allows only numbers;");
该代码运行完美。我想知道的问题是是否只能保留一条消息,并且该问题适用于每个函数,例如:
lua_getglobal(L, "lgd");
lua_getfield(L, -1, "value_pos_x");
cr->value_pos_x = lua_tointeger(L, -1);
lua_getfield(L, -2, "value_pos_y");
cr->value_pos_y = lua_tointeger(L, -1);
lua_getfield(L, -3, "time");
cr->time = lua_tointeger(L, -1);
if (lua_tointeger(L, -1) != lua_isinteger(L, -1))
printf("The entry %s is invalid;", capture_lua_getfield_name);
最佳答案
像这样的宏(未经测试,并在SO编辑框中编写):
#define GET_INTEGER_WARN(ind, fld) do { \
lua_getfield(L, ind, #fld); \
cr->fld = lua_tointeger(L, -1); \
\
if (!lua_isinteger(L, -1)) \
printf(#fld" allows only numbers;"); \
} while (0)
让你做这样的事情:
lua_getglobal(L, "lgd");
GET_INTEGER_WARN(-1, value_pos_x);
GET_INTEGER_WARN(-2, value_pos_y);
GET_INTEGER_WARN(-3, time);
这样的功能(与之前相同的警告):
lua_Integer
get_integer_warn(lua_State *L, int ind, char *fld)
{
lua_getfield(L, ind, fld);
if (!lua_isinteger(L, -1))
printf("%s allows only numbers", fld);
return lua_tointeger(L, -1);
}
让你做这样的事情:
cr->value_pos_x = get_integer_warn(L, -1, "value_pos_x")
cr->value_pos_y = get_integer_warn(L, -2, "value_pos_y")
cr->time = get_integer_warn(L, -3, "time")
关于c - lua功能的警报消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33652665/