c - lua中宏的使用方法

标签 c lua lua-api

现在正在寻找 lua 上的几个线程,发现这篇文章非常有趣:

Alert messages for lua functions

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

#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 并且成功了。

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

最佳答案

使用字符串文字没有意义:

GET_INTEGER_WARN(-1, "wooxy_value"); 

结果

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

去掉引号:

GET_INTEGER_WARN(-1, wooxy_value);

关于c - lua中宏的使用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33672963/

相关文章:

c - 数组无法打印最大值

c - 具有灵活位大小的定时器环绕

c - 这个 C 代码(来自 lua 库,Torch)是如何编译/工作的?

c - 从 c api 内部创建 lua 表时出错

c++ - Lua C API 如何确定函数是作为类成员调用的还是只是表中的函数?

C: 无序浮点比较不会引发 FE_INVALID

c++ - 将现有的 C++ 对象传递给 Lua 并调用传递的对象的成员函数

MySql from Lua 运行时 undefined symbol 问题

c - lua 函数的警报消息

c - 用于散列 ip 片段的散列函数