我在代码中有一些宏
#define NUM_IN 3
#define NUM_1 1
#define NUM_2 2
#define NUM_3 3
#define MY(NUMBER) NUM_##NUMBER
所以,如果我正在调用宏
MY(NUM_IN)
我希望预处理结果为3
,但我得到NUM_NUM_IN
所以,我应该这样做,预处理器将输入
第1步
MY(NUM_IN)
第2步
MY(3)
第3步
NUM_3
第4步
3
请让我知道我错过了什么。我是stackoverflow的新手,所以如果我错了,请引导我到正确的渠道 谢谢
答案 0 :(得分:2)
添加一层间接:
#define CAT_(a, b) a ## b /* Pastes */
#define CAT(a, b) CAT_(a, b) /* Expands */
#define MY(NUMBER) CAT(NUM_, NUMBER)
答案 1 :(得分:2)
添加一个间接层:
#define NUM_IN 3
#define NUM_1 1
#define NUM_2
#define NUM_3 3
#define CAT_(X,Y) X##Y
#define MY(NUMBER) CAT_(NUM_,NUMBER)
MY(NUM_IN)
答案 2 :(得分:1)
宏参数在被替换为宏体之前完全进行宏扩展,除非将它们与其他标记进行字符串化或粘贴。 1
因此,在MY(NUM_IN)
中,NUM_IN
不会扩展。您需要为连接定义另一个宏
#define PASTER(n) NUM_ ## n
#define MY(NUMBER) PASTER(NUMBER)
<子> 1。 GCC文档:3.5 Concatenation