在C中使用宏内的宏名称

dar*_*aud 2 c macros self

#define V_M1 10
#define A_M1 60
#define V_M2 15
#define A_M2 56

#define M1 { V_M1, A_M1 }
#define M2 { V_M2, A_M2 }
int m1[]=M1, m2[]=M2;
Run Code Online (Sandbox Code Playgroud)

有没有办法简化M1和M2宏的定义,这样我就不必重复它们的名字(由于宏的实际复杂性,我的情况下的错误来源)?就像是:

#define M1 { V_MyOwnName, A_MyOwnName }
#define M2 { V_MyOwnName, A_MyOwnName }
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 6

使用类似函数的宏添加间接级别

#define EXPAND(name) { V_##name, A_##name }
#define M1 EXPAND(M1)
#define M2 EXPAND(M2)
Run Code Online (Sandbox Code Playgroud)

##是令牌连接运算符,即需要V,无论您是通过name和胶水他们形成一个单一的令牌.如果结果是另一个宏,它会进一步扩展.