【问题标题】:concatenation of integers using macro使用宏连接整数
【发布时间】:2015-07-15 09:56:32
【问题描述】:

只需在forum 上阅读此内容。有人可以对此有所了解,为什么以及如何工作?

#include <stdio.h>
#define merge(a, b) b##a
int main(void)
{
    printf("%d ", merge(12, 36));
    return 0;
}

另一方面,如果我们不使用宏,那么编译器会给出编译错误。

【问题讨论】:

  • 只是 ## 操作员做它应该做的事情。

标签: c macros c-preprocessor


【解决方案1】:

## 是宏替换的一种形式。引用 C11,第 §6.10.3.3 章,## 运算符

如果在类函数宏的替换列表中,一个参数紧跟在前面 或者后跟一个##预处理令牌,参数替换为对应的 参数的预处理标记序列;

因此,在您的情况下,根据 MA​​CRO 定义,

#define merge(a, b) b##a

在您的代码中

merge(12, 36)

看起来像

3612

在预处理阶段之后。

FWIW,完整的声明,printf("%d ", 3612);,就这么简单。

【讨论】:

  • @Prashant 如您所见,事实并非如此。 :-)
猜你喜欢
  • 2014-04-19
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 2015-02-03
  • 1970-01-01
相关资源
最近更新 更多