英语不是我的母语;因此我展示了要描述的代码。
#define concat_temp(x, y) x##y
#define concat(x, y) concat_temp(x, y)
#define BAR 2
int main() {
concat_temp(FOO, BAR)
concat(FOO, BAR)
}
当我执行clang -E
时,宏被扩展到
int main() {
FOOBAR
FOO2
}
谁能向我解释为什么concat_temp
不能将bar
扩展到2
,而concat
做到了?
根据CppReference,
替换列表中任意两个连续标识符之间的
##
运算符对两个标识符(不是首先宏展开的(执行参数替换,然后连接结果。
##
运算符对标识符本身进行操作,因此如果您想"使字符串为文字";或者将CCD_ 8-d宏的值连接起来。