让我们说一些#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();
答案 0 :(得分:3)
应该可以再进行一轮扩展:
Traverse
为了强制扩展参数本身(例如#define CONCATENATE(x) CONCATENATE2(x)
#define CONCATENATE2(x) _TEST_ ## x ## _CLK_ENABLE ()
),必须使用额外的间接寻址。没有它,我们将以ABC
结尾。
答案 1 :(得分:-1)
您可以使用##
#define CONCATENATE(x,y) x ## y