如何在lua中使用宏

我现在正在查看一些关于 Lua 的帖子,并发现这篇帖子非常有趣:

为 Lua 函数创建警报消息

我正在尝试在我的代码中使用相同的宏,但对操作进行了一些更改:

#define GET_INTEGER_WARN(ind, fld) do { \
lua_getfield(L, ind, #fld); \
p->##fld = lua_tointeger(L, -1); \
\
if (!lua_isinteger(L, -1)) \
    printf(#fld" allows only numbers;"); \
} while (0)

我的代码:

lua_getfield(L, -1, "wooxy_value");
p->wooxy_value = lua_tointeger(L, -1);

lua_getfield(L, -2, "wooxy_type");
p->wooxy_type = lua_tointeger(L, -1);

我按照作者的解释更改了我的代码,因此:

GET_INTEGER_WARN(-1, "wooxy_value");
GET_INTEGER_WARN(-2, "wooxy_type");

更多的宏错误发生在以下位置:

p->##fld = lua_tointeger(L, -1); \

编译错误: error c2059 syntax error 'string'

我进行了测试,并使用 p->wooxy_value 替换了函数 p->##fld,其有效。

更多的宏错误只对某个函数有效,有人能告诉我宏有什么问题吗?即使使用整数值,消息也会出现。

点赞
用户694733
用户694733

使用字符串字面量没有意义:

GET_INTEGER_WARN(-1, "wooxy_value");

结果为:

p->"wooxy_value" = lua_tointeger(L, -1);

去掉引号:

GET_INTEGER_WARN(-1, wooxy_value);
2015-11-12 13:55:47