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

时间:2011-02-28 15:37:51

标签: c c-preprocessor

是否可以编写定义#define的<{1}}?

例如:

#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_##n v \ FIDS_##n FID_STRE(v) 工作正常,但会创建两个静态变量。是否可以使FID_DECL工作并定义两个定义?

2 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:0)

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

我知道消耗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)

只需将它们重命名为递归