扩展后并置#define

时间:2019-06-14 12:55:12

标签: c

让我们说一些#defines

#define _TEST_FOO()  // some code here
#define _TEST_BAR()  // some code here

#define ABC FOO
#define BCD BAR

我可以这样创建另一个#define吗?

#define CONCATENATE(x)   //??something here??

如果我在代码中的某个地方使用CONCATENATE(ABC);CONCATENATE(BCD);,它将分别生成_TEST_FOO();_TEST_BAR();

谢谢

编辑:

对不起,我的意思是:

#define _TEST_FOO_CLK_ENABLE()
#define _TEST_BAR_CLK_ENABLE()

因此,调用CONCATENATE(x);时的结果应为:

_TEST_FOO_CLK_ENABLE();
_TEST_BAR_CLK_ENABLE();

2 个答案:

答案 0 :(得分:3)

应该可以再进行一轮扩展:

Traverse

[Live example]

为了强制扩展参数本身(例如#define CONCATENATE(x) CONCATENATE2(x) #define CONCATENATE2(x) _TEST_ ## x ## _CLK_ENABLE () ),必须使用额外的间接寻址。没有它,我们将以ABC结尾。

答案 1 :(得分:-1)

您可以使用##

#define CONCATENATE(x,y) x ## y