【发布时间】:2015-07-27 13:49:02
【问题描述】:
我想要一个宏调用,它接受多个函数指针,每个函数指针由第二个宏调用,它是一个函数声明。
我想要表单上有两个宏
#define FUNCTION_DEF(func) extern int func(void);
#define FUNCTION_DEFS(...) (???)
这样称呼
FUNCTION_DEFS(
myFunc1,
myFunc2,
otherFunc1,
otherFunc2,
defaultFunc
)
展开成
FUNCTION_DEF(myFunc1)
FUNCTION_DEF(myFunc2)
FUNCTION_DEF(otherFunc1)
FUNCTION_DEF(otherFunc2)
FUNCTION_DEF(defaultFunc)
换句话说,对FUNCTION_DEFS 的单个调用扩展为所有可变参数的函数声明。
目前我只是跳过第一步并在每个函数指针上调用FUNCTION_DEF,但是解决这个问题会很棒。
这可能吗?
编辑:
感谢 @Vality 向我介绍 X-Macro。我发现这个帖子“Real-world use of X-Macros”正是我需要的。
【问题讨论】:
-
是的。与例如Boost.PP.
-
@Columbo:C 语言的提升?
-
@Olaf 来自文档:“Boost Preprocessing 库是一个宏库,支持预处理器元编程。该库支持 C++ 和 C 编译。”跨度>
-
好吧,对不起,不知道boost是两个部分:预处理和编译库。 (我不知道如何解释您第一条评论中的“PP”)
-
@Olaf 为了完整性,Boost 不是一个库,而是一个独立库的集合。有些是仅头文件,有些需要目标文件,有些也是 C。
标签: c macros function-pointers variadic-macros