【发布时间】:2021-11-13 17:48:04
【问题描述】:
在宏定义的开头是否有标记粘贴参数或非函数宏?换句话说,就像#define JOIN_TOKENS(a, b) ##a##b 这样的东西是被允许的。
一个例子是JOIN_TOKENS(Up, Here) 变成UpHere。另外,我希望任何作为参数传递的值都不会被扩展。这几乎做到了,但它产生了一个错误:
#define APPEND_TOKEN(a, b) a##b
#define VAR 0
#define JOIN(a, b) APPEND_TOKEN(##a, ##b)
JOIN(VAR, iable)
它应该产生VARiable,它确实产生了,但伴随着错误:
<stdin>:4:1: error: pasting formed '(VAR', an invalid preprocessing token
JOIN(VAR, iable)
^
<stdin>:3:33: note: expanded from macro 'JOIN'
#define JOIN(a, b) APPEND_TOKEN(##a, ##b)
^
<stdin>:4:1: error: pasting formed ',iable', an invalid preprocessing token
<stdin>:3:38: note: expanded from macro 'JOIN'
#define JOIN(a, b) APPEND_TOKEN(##a, ##b)
^
/
VARiable
2 errors generated.
【问题讨论】:
-
您能否发布一个输入/预期输出示例,以帮助可视化您希望达到的结果?
-
@JerryJeremiah 这会产生一个字符串,这不是我想要的。
-
@Melab 对不起,我完全误解了你的问题......
标签: c++ c c-preprocessor