#define VAL1CHK 20
#define NUM 1
#define JOIN(A,B,C) A##B##C
int x = JOIN(VAL,NUM,CHK);
Run Code Online (Sandbox Code Playgroud)
以上代码我的期望是
int x = 20;
Run Code Online (Sandbox Code Playgroud)
但是当宏扩展到时,我得到编译错误
int x = VALNUMCHK; // Which is undefined
Run Code Online (Sandbox Code Playgroud)
如何使它首先NUM被替换并被JOIN使用?
您可以将JOIN操作重定向到另一个宏,然后执行实际粘贴,以强制扩展其参数:
#define VAL1CHK 20
#define NUM 1
#define JOIN1(A, B, C) A##B##C
#define JOIN(A, B, C) JOIN1(A, B, C)
int x = JOIN(VAL,NUM,CHK);
Run Code Online (Sandbox Code Playgroud)
此技术通常与宏中的粘贴和字符串化运算符一起使用.