【发布时间】:2014-04-22 12:01:38
【问题描述】:
假设某些标记FOO、BAR 和DUD(可能还有更多)是否为#defined。我想要一个宏EXTEND(name) 生成一个有效的扩展名,例如
#define FOO
#undef BAR
#define DUD
EXTEND(object)
扩展到
object_foo_dud
如果有n 宏标记(如FOO、BAR 和DUD )?我认为 O(n) 行应该是可能的,但是如何?
我已经尝试过:
#ifdef FOO
# define ExtFOO(name) name ## _foo
#else
# define ExtFOO(name) name
#endif
#ifdef BAR
# define ExtBAR(name) ExtFOO(name) ## _bar
#else
# define ExtBAR(name) ExtFOO(name)
#endif
#ifdef DUD
# define ExtDUD(name) ExtBAR(name) ## _dud
#else
# define ExtDUD(name) ExtBAR(name)
#endif
#define EXTEND(name) ExtDUD(name)
但是
test.cc:26:5: 错误:粘贴形成的 ')_dud',一个无效的预处理令牌
扩展(对象)
^
【问题讨论】:
标签: c++ macros c-preprocessor