C中##预处理器的用途是什么?

时间:2010-09-03 12:28:08

标签: c

  

可能重复:
  C preprocessor and concatenation

任何人都可以用例子来解释吗?

2 个答案:

答案 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”(虽然是规范的一部分),如果你弄错了可能会引起麻烦。我相信新语言不再这样做了。