1 c++ concatenation c-preprocessor
我把我的问题提炼到这个代码片段 - 但它是一个更大的程序的一部分,所以我不想要一个不同的方式来做到这一点 - 我需要一种方法来使这项工作!
当我从这段代码生成预处理文件时:
#define OUTER(a, b) \
a##b
#define INNER(c, d) \
c##d
enum foo {
OUTER(INNER(x, y), z)
}; // line 108
int APIENTRY _tWinMain(...)
{
foo bar = xyz; // line 112
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
enum foo {
xyz
}; // line 108
int __stdcall wWinMain(...)
{
foo bar = xyz; // line 112
}
Run Code Online (Sandbox Code Playgroud)
这就是我想要的.但是,如果我尝试编译代码,我得到:
错误C2146:语法错误:在标识符'z'之前缺少'}'第108行
错误C2143:语法错误:缺少';' 在'}'第108行之前
错误C2143:语法错误:缺少';' 在'}'第108行之前
错误C2059:语法错误:'}'第108行
错误C2065:'xyz':未声明的标识符行112
我无法解决这个问题!问题似乎是由于##:
#define OUTER(a, b) \
a##b
Run Code Online (Sandbox Code Playgroud)
但是为什么(以及如何解决它)超出了我......
请改用:
#define CONCAT(X,Y) X##Y
#define OUTER(a, b) CONCAT(a,b)
#define INNER(a, b) CONCAT(a,b)
enum foo {
OUTER(INNER(x, y),z)
}; // line 108
int main(...)
{
foo bar = xyz; // line 112
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
687 次 |
| 最近记录: |