等价于define名称中的hash-hash

时间:2011-10-28 10:34:51

标签: c metaprogramming c-preprocessor c99

#define中,可以使用A ## B连接预处理程序变量并定义标识符。

#define ADD_UNDERSCORE(X) X##_
/* ADD_UNDERSCORE(n) -> n_ */

是否有#define的等效左侧? E.g。

#define A a
#define B b
#define A##B(X) X
/* ab(n) -> n */

1 个答案:

答案 0 :(得分:4)

没有。在宏定义中,define之后的第一个标记必须是标识符((draft) ISO/IEC 9899;1999,6.10,第149页)。

没有其他#define指令的预处理可以使标识符脱离其他内容。特别是,该标准规定了(6.10.3):

  

预处理指令中的预处理标记不受宏的限制   扩展,除非另有说明。

宏名称没有“另有说明”。

相关问题