質問: C言語のマクロの挙動について詳しい本や参考ホームページなどあれば教えていただけないでしょうか。 私が持っている参考書ではあまりマクロについて取り扱っておらず、つまづいてしまいました。 参考までに、今つまづいているソースコード箇所を抜粋します。 宜しくお願いします。 URL ``` #if defined(LUA_BUILD_AS_DLL) /* { */ #if defined(LUA_CORE) || defined(LUA_LIB) /* { */ #define LUA_API __declspec(dllexport) #else /* }{ */ #define LUA_API __declspec(dllimport) #endif /* } */ #else /* }{ */ #define LUA_API extern #endif /* } */ //どう置き換わるのかよくわからない LUA_API int (lua_isnumber) (lua_State *L, int idx); ```
回答: マクロの挙動というよりはプリプロセッサの挙動でしょうか。 何も難しく考えることはありません。 質問にあるようなソースも普通のプログラムと同じ考え方で読み解けます。 ``` #if defined(LUA_BUILD_AS_DLL) /* { */ ``` LUA_BUILD_AS_DLLが定義されていれば?ですね。 ``` #if defined(LUA_CORE) || defined(LUA_LIB) /* { */ ``` LUA_COREまたはLUA_LIBが定義されていれば?ですね。 ``` #define LUA_API __declspec(dllexport) ``` マクロ LUA_APIを__declspec(dllexport)で定義する、ですね。 と、順を追って読んでいけば難しいことはありません。 ただし、#if define(MACRO) で見ているマクロが定義されているかというのは、ソースファイルを検索するなりするしかないですが。