【发布时间】:2017-12-11 01:04:15
【问题描述】:
我想用一个宏在 C++ 中定义另一个宏。如果定义宏的宏有两个参数,一个是要对其执行“#ifdef”测试的宏的名称,另一个是要执行 #define 的新宏的名称。这个例子被删减了。实际情况很复杂,所以我想把它排除在外。
#define TEST_ME // or NOT
#define DEFINE_A_MACRO( _test_me_, _define_me_ ) \
\
#ifdef (actual value of)_test_me_ \
#define (actual value of _define_me_) One Thing \
#else \
#define (actual value of _define_me_) Another Thing \
#endif
...
DEFINE_A_MACRO( TEST_ME, DEFINE_ME )
有没有办法做到这一点? 我对此表示怀疑,但不妨提出问题:)
【问题讨论】:
-
宏扩展不能包含预处理指令。
-
在#define 宏中转义# 符号?与它回答“是”的问题不同,您可以在宏中转义哈希符号,但它也回答了这个问题,因为其中一个回答说它不会“重新扫描”宏内容并应用现在扩展的预处理器指令。对于这个问题,答案是否定的——这种措辞在搜索中可能很好用。
标签: c++ macros preprocessor