私が取り組んでいるプログラムに問題があります。私はどの機能がコンパイルされているかを表示するために--helpを試しています。しかし、これらのものはかなりあり、 "通常の"方法はあまりにも冗長です。たとえば:別のマクロで#ifdef、#endif節を生成する
#ifdef HAVE_FOO
static const bool have_foo = true;
#else
static const bool have_foo = false;
#endif
printf("Support for foo: %s\n", have_foo ? "yes" : "no");
これは基本的にすべての機能で実行する必要があるため、必要のない行がたくさんあります。
だから、私はそれのためにいくつかのマクロを書きたいと思った:
#define _SUPP(X) #ifdef HAVE_##X \
static const bool _##X##_SUPP = true; \
#else \
static const bool _##X##_SUPP = false; \
#endif
#define _PRINTSUPP(var, name, desc) printf("\t%s - %s: %s\n", name, desc, _##var##_SUPP ? "yes" : "no")
しかし、問題はここにあります。マクロは1行に展開され、プリプロセッサはこれを突き止めます。実際の改行を使ってマクロを生成する方法はありますか、または#ifdef
を1行で評価することは可能ですか?
あなたは 'features'の宣言に' [] 'がないと思います、いいえ? –
@Jens:ありがとう、固定。 –