c - 在 C 的宏中使用宏的名称

标签 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;

有没有一种方法可以简化 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/

相关文章:

c - 将数组作为函数参数传递 c

c - winapi:SetFocus() 可以无错误地返回 NULL 吗?因为这就是我在实现焦点恢复时所看到的 a la recent oldnewthing post

c++ - 禁用没有宏的 C++ 代码

macros - Racket 宏可以接受关键字参数吗?

Python: self 作为属性

C 兴趣嵌套循环

asp.net - Kentico 9 购物车 ECommerceContext 金额在宏和布局/.NET 之间不一致

Python、__init__ 和 self 混淆

Ruby:在让出过程中,谁是 block 内的 self?

c - 使用 openssl 库的 C 中的 sha1 示例