で変数を作成して返す:C:私はこの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にはブロックから値を返す拡張機能がありますが、コンパイラの拡張機能を避けたいと思います。私はこれもインライン関数に変更する必要があることを認識していますが、なぜ今マクロが機能しないのか不思議です。
'typeof(lua_to ## type) 'という式は' lua_to ## type'関数が返す型ではなく、関数型に評価されます。 –
"コンパイラ拡張を避けたい" - 'typeof'はコンパイラの拡張機能なので、それを使用したい場合は次のステップを踏むのが悪くないかもしれません。 –
Dratは、それを恐れていました。 :| – Rena