【发布时间】:2011-04-07 20:00:32
【问题描述】:
【问题讨论】:
标签: c
【问题讨论】:
标签: c
它允许从它们的部分构造标识符。例如:
#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) 扩展到a 和IF(1, a, b) 到b。此外,有时,它用于生成结构和函数名称(类似于 c++ 模板)。
【讨论】:
我不确定你所说的“##”预处理器是什么意思。
C 有一个预处理器,用于在编译时间之前扩展宏。这是源代码的第一次传递。它有几个不同的用途:
#include)#ifdef 等)#define)
但请注意,这并不是真正的“C”(尽管是规范的一部分),如果你弄错了,可能会让人头疼。我相信新的语言不会再这样做了。
【讨论】: