我有一个宏定义如下
#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)
两者都适用于我使用的输入..但我对使用宏并不熟悉。 我想了解一些输入是否会破坏这些......
答案 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
将起作用。