如何控制C宏优先级

时间:2015-06-23 09:33:10

标签: c macros

#define VAL1CHK 20

#define NUM 1

#define JOIN(A,B,C) A##B##C

int x = JOIN(VAL,NUM,CHK);

上面的代码我的期望是

int x = 20;

但是当宏扩展到

时,我得到编译错误
int x = VALNUMCHK; // Which is undefined

如何制作,以便首先替换NUM并使用JOIN

1 个答案:

答案 0 :(得分:5)

您可以将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);

此技术通常与宏中的粘贴和字符串化运算符一起使用。