#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;
有没有一种方法可以简化 M1 和 M2 宏的定义,这样我就不必在内部重复它们的名称(由于宏的实际复杂性,我的错误来源)?像这样的东西:
#define M1 { V_MyOwnName, A_MyOwnName }
#define M2 { V_MyOwnName, A_MyOwnName }
最佳答案
使用类似函数的宏添加一个间接级别
#define EXPAND(name) { V_##name, A_##name }
#define M1 EXPAND(M1)
#define M2 EXPAND(M2)
##
是 token 连接运算符,它将 V
和您传递的任何内容作为 name
并将它们粘合在一起以形成单个 token .如果结果是另一个宏,它会进一步扩展。
关于c - 在 C 的宏中使用宏的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43232032/