如何在C中定义一个定义?

是否可以编写定义#define

例如:

 #define FID_STRS(x) #x #define FID_STRE(x) FID_STRS(x) #define FID_DECL(n, v) static int FIDN_##n = v;static const char *FIDS_##n = FID_STRE(v) 

但反而:

 #define FID_DECL2(n, v) #define FIDN_##nv \ FIDS_##n FID_STRE(v) 

FID_DECL工作正常但创建了两个静态变量。 是否可以使FID_DECL2工作并定义两个定义?

没有; 预处理一次完成。 如果您想要或需要更高级的行为,请考虑使用其他工具预处理源,例如m4。

此外,替换列表中的# (在#define FIDN...的开头将被解析为# (stringize)运算符:此运算符的操作数必须是命名的宏参数,其define不是。

在定义宏时,你应该处理宏不应该直接或间接地(递归地)调用自身的一件事。

我知道消耗8个字节的两个静态变量对于你来说是广阔的。

我有解决方案

 #define FID_STRS2(x) #x #define FID_STRE(x) FID_STRS2(x) #define FID_DECL(n, v) static int FIDN_##n = v;static const char *FIDS_##n = FID_STRE(v) 

只需将它们重命名为递归