C宏来粘贴令牌

时间:2018-05-14 08:44:24

标签: c c-preprocessor

我有一个宏定义如下

#define X_T_a(b)            b->a

b =指向结构的指针, a =该结构中的字段

我想定义另一个解析为X_T_a(b)的宏T(a,b)

我应该使用

#define T(a, b)             X_T_##a(b)

#define T(a,b)   X_T(a,b)
#define X_T(a,b)   X_T_##a(b)

两者都适用于我使用的输入..但我对使用宏并不熟悉。 我想了解一些输入是否会破坏这些......

1 个答案:

答案 0 :(得分:1)

单宏版本不适用于宏符号。

例如,假设你有:

#define MACRO_OBJECT   realObject
#define MACRO_MEMBER   realMember
T(MACRO_OBJECT, MACRO_MEMBER)

您希望将其扩展为X_T_realObject(realMember)

如果您使用的是第一个版本,则会获得X_T_MACRO_OBJECT(realMember),因为在##扩展为MACRO_OBJECT之前,连接运算符realObject将起作用。