与C ++预处理器连接

时间:2012-03-11 15:31:20

标签: c++ concatenation c-preprocessor

我正在尝试让预处理器根据已定义的名称生成列表。像这样的东西

#define LIST "Start of list!"

#ifdef WITH_FOO
#define LIST LIST "Foo"
#endif

#ifdef WITH_BAR
#define LIST LIST "Bar"
#endif

#define LIST LIST "End of list!"

我从这里得到一些关于LIST被重新定义的警告,然后在我尝试使用LIST的代码中它给出了一个错误:“LIST没有在这个范围内声明”,除了警告,我相信它应该是

我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:3)

您可以使用一些辅助宏:

#ifdef WITH_FOO
#  define LIST_FOO "Foo"
#else
#  define LIST_FOO
#endif

// ... ditto for BAR

#define FOO "Start of list!" LIST_FOO LIST_BAR "End of list!"

答案 1 :(得分:1)

您不能像使用预处理器在C或C ++中那样逐步构建宏值。

您可以使用预处理器获取一些小故障 - 请参阅Boost Preprocessor库以获取可能的指示。但是,即便如此,我认为也没有提供您正在寻求的功能。