C:在宏中创建并返回变量

时间:2012-04-24 05:56:51

标签: c macros comma-operator

我对这个C宏无法编译的原因感到有点困惑:

#define LUA_GET_FIELD(Lua, idx, name, type) (\
    lua_getfield((Lua), (idx), (name)), \
    typeof(lua_to##type) __result = lua_to##type((Lua), -1), \
    lua_pop((Lua), 1), __result)

调用它时,我收到错误:

src/event.lcpp.c:134:15: error: expected primary-expression before ‘typeof’
src/event.lcpp.c:134:15: error: expected ‘)’ before ‘typeof’

如果我用typeof(lua_to##type)替换int,也会发生同样的情况,所以我怀疑问题与逗号有关。你不能在这样的表达式中间声明变量吗?

我知道gcc有一个从块返回值的扩展,但我想避免编译器扩展。我也意识到这应该改成内联函数,但现在我很好奇为什么宏不起作用。

1 个答案:

答案 0 :(得分:1)

标准C确实不允许您在表达式中任意定义新变量。较旧的标准甚至不允许它们在任何地方,但在块的开头(也就是说,你不能将它们与语句混合)。