この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にはブロックから値を返すための拡張機能があることは知っていますが、コンパイラー拡張機能は避けたいと思います。また、これをインライン関数に変更する必要があることも理解していますが、マクロが機能しない理由に興味があります。