任何人都可以用例子来解释吗?
答案 0 :(得分:8)
它允许从其各个部分构造标识符。例如:
#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 ++模板)。
答案 1 :(得分:0)
我不确定“##”预处理器是什么意思。
C有一个预处理器,用于在编译时之前扩展宏。这是源代码的第一次传递。它有几个不同的用途:
#include
)#ifdef
等。)#define
)
但请注意,这不是真正的“C”(虽然是规范的一部分),如果你弄错了可能会引起麻烦。我相信新语言不再这样做了。