プリプロセッサ マクロを使用して特定のプレフィックスを他のマクロに追加するかなり一般的なコードがあります。これは何が起こるかの非常に単純化された例です:
#define MY_VAR(x) prefix_##x
「prefix_」は実際には別の場所で定義されているため、ファイルが含まれるたびに異なります。それはうまく機能しますが、トークンの1つが存在しない場合にスキップしたいコードがいくつかありますが、これは機能しません:
#if defined MY_VAR(hello)
私が展開したいのはこれです:
#ifdef prefix_hello
しかし、私は方法を理解できません。展開を行うには MY_VAR() マクロを使用する必要があるため、名前をハードコードすることはできません。(実際には、いくつかのテストコード用です。一連のクラスをテストするたびに、同じコードが異なるプレフィックスで含まれています。いくつかのクラスについては、いくつかのテストをスキップしたいと思います。)
これは C++ プリプロセッサで可能ですか?
アップデート:
問題をさらに実証するためのセミコンパイル可能なコードを次に示します: (下のコメントに押し込まないようにするため)
#define PREFIX hello
#define DO_COMBINE(p, x) p ## _ ## x
#define COMBINE(p, x) DO_COMBINE(p, x)
#define MY_VAR(x) COMBINE(PREFIX, x)
// MY_VAR(test) should evaluate to hello_test
#define hello_test "blah blah"
// This doesn't work
#ifdef MY_VAR(test)
printf("%s\n", MY_VAR(test));
#endif