私の C コードには、特定の変数の名前を作成するのに役立つ 2 つのマクロがあります。例として、次のことを考慮してください。
#define MACROA(name) A_##name
#define MACROB(name) B_##name
void *MACROB(MACROA(object));
という変数を宣言しようとしていますB_A_object
。ただし、これは機能せず、コンパイラから次のメッセージが表示されます。
object.c:27:21: error: a parameter list without types is only allowed in a function definition
void *MACROB(MACROA(object));
^
object.c:26:26: note: expanded from macro 'MACROB'
#define MACROB(name) B_##name
^
ということで、プリプロセッサは の結果を取っていないように見えますがMACROA(object)
、式自体を考慮して を作ろうとしていB_MACROA(object)
ます。では、別のマクロに渡されたマクロの結果をプリプロセッサに考慮させるにはどうすればよいでしょうか?