【问题标题】:Concatenate #define after expanding [duplicate]扩展后连接#define [重复]
【发布时间】:2019-06-14 12:55:12
【问题描述】:

假设我有一些#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();

【问题讨论】:

标签: c


【解决方案1】:

这应该可以通过额外的一轮扩展来实现:

#define CONCATENATE(x) CONCATENATE2(x)
#define CONCATENATE2(x) _TEST_ ## x ## _CLK_ENABLE ()

[Live example]

额外的间接是强制参数本身(例如ABC)扩展所必需的。没有它,我们最终会得到_TEST_ABC()

【讨论】:

  • @user1806687 您还要对这个问题进行修改吗?我不会更新答案以击中移动目标。当问题处于最终形式时,请标记我,以便我可以解决它(请,在未来,尝试在第一时间解决问题)。
  • @user1806687 好的,已编辑。
  • 我会接受你的回答,因为它是我所要求的问题的解决方案。但它不适用于我的情况,我省略了很多信息。如果你想再试一次,新问题发布在:stackoverflow.com/questions/56600682/…
猜你喜欢
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
相关资源
最近更新 更多