我在正在處理的程序中遇到問題。我正在嘗試--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")
然而,有一個問題在這裏。宏將被擴展爲一行,並且預處理器會在此處扼殺。有沒有一種方法可以用實際的換行符來生成一個宏,還是可以在一條線上評估一個#ifdef
?
猜測你在`features`的聲明中缺少'[]`,不是嗎? – 2011-01-25 12:36:55