如何在lua中使用宏

时间:2015-11-12 13:49:29

标签: c lua lua-api

现在看起来很少有关于lua的帖子,发现这篇文章非常有趣:

Alert messages for lua functions

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

ContentType

我的代码:

#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->##fld函数,但它确实有效。

更多这种方式只适用于某个功能,任何人都可以告诉我这个宏有什么问题吗?即使使用整数值,该消息也会出现。

1 个答案:

答案 0 :(得分:3)

使用字符串文字毫无意义:

GET_INTEGER_WARN(-1, "wooxy_value"); 

结果

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

删除引号:

GET_INTEGER_WARN(-1, wooxy_value);