【问题标题】:What is the use of ## preprocessor in C [duplicate]C中##预处理器的用途是什么[重复]
【发布时间】:2011-04-07 20:00:32
【问题描述】:

可能重复:
C preprocessor and concatenation

谁能举例说明?

【问题讨论】:

标签: c


【解决方案1】:

它允许从它们的部分构造标识符。例如:

#define CLASS_NAME(name) CLASS__ ## name

会将CLASS_NAME(alpha) 扩展为CLASS__alpha。它被广泛用于 boost 预处理器库使用的技巧中,例如。

#define IF0(a, b) b
#define IF1(a, b) a
#define IF(cond, a, b) IF ## cond(a, b)

这会将IF(0, a, b) 扩展到aIF(1, a, b)b。此外,有时,它用于生成结构和函数名称(类似于 c++ 模板)。

【讨论】:

  • 嗨 jpalecek 感谢您的澄清。
  • IF(0, a, b) 不是映射到 b 和 IF(1, a, b) 映射到 a 吗?
【解决方案2】:

我不确定你所说的“##”预处理器是什么意思。

C 有一个预处理器,用于在编译时间之前扩展宏。这是源代码的第一次传递。它有几个不同的用途:

  • 包括其他源/头文件 (#include)
  • 条件编译代码(#ifdef 等)
  • 扩展宏 (#define)
    • 方便用于常量
    • 简单的函数

但请注意,这并不是真正的“C”(尽管是规范的一部分),如果你弄错了,可能会让人头疼。我相信新的语言不会再这样做了。

【讨论】:

  • 嗨达伦 jpalecek 的回答是我所期待的。感谢您的提醒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 2011-02-20
  • 2011-01-30
  • 1970-01-01
  • 2016-10-29
  • 2014-01-15
  • 1970-01-01
相关资源
最近更新 更多