C中的宏生成宏?

7 c macros variadic-functions c-preprocessor

我想让C预处理器为我生成宏(即,我只使用C99).我写了一个宏

#define make_macro(in) <...magic here...>
Run Code Online (Sandbox Code Playgroud)

当我放

make_macro(name1)
make_macro(name2)
Run Code Online (Sandbox Code Playgroud)

稍后在代码中,它将扩展为

#define name1(...) name1_fn(name1_info, __VA_ARGS__)
#define name2(...) name2_fn(name2_info, __VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)

然后我就可以使用name1和name2作为(宏实现的)函数.我认为我在两个步骤中都使用了宏:使用宏来重复填充模板是有意义的,并且除了通过宏之外,可变参数处理将不起作用.

那么什么进入<......魔法......>占位符来做到这一点?在这一点上,我开始相信它在C99中是不可能的,但也许我错过了语法的一些细节.

Ant*_*ima 6

在标准C中不可能.


nik*_*nik 5

您是否考虑过使用M4宏?我认为它们在大多数平台上都可用,因此这不是一个限制。

M4 GNU页面

  • +1,M4通常被忽略,它是一个非常强大的代码生成工具。我希望人们每次看到我使用LISP笑话时都不要再笑了。 (2认同)