宏调用函数
发布时间:2020-12-16 10:13:52 所属栏目:百科 来源:网络整理
导读:我需要一个宏(或一个函数,但最好是一个宏),它接受一个函数名和无限数量的参数,然后将参数传递给函数.我们假设这个宏是MACROFOO. #define MACROFOO(function,...) /* what do I put here?? */int foo_bar(int x,int y){ // do stuff}int main(void){ int x =
我需要一个宏(或一个函数,但最好是一个宏),它接受一个函数名和无限数量的参数,然后将参数传递给函数.我们假设这个宏是MACROFOO.
#define MACROFOO(function,...) /* what do I put here?? */ int foo_bar(int x,int y) { // do stuff } int main(void) { int x = 3; int y = 5; MACROFOO(foo_bar,x,y); // calls foo_bar(x,y) } 我怎么能定义这样一个宏?我想过做的事情: #define MACROFOO(function,args...) (function)(args) 但看起来它传递给函数,而不是实际的参数.我该怎么办? 解决方法
您可以使用__VA_ARGS__扩展可变参数宏的….
例: #define MACROFOO(function,...) (function)(__VA_ARGS__) MACROFOO(printf,"hello world%c",'!') /*^ expands to: (printf)("hello world%c",'!') */ 注意:您可能知道,括号会阻止函数参数作为宏展开(如果它是宏). 即, #define BAR(...) myprintf(__VA_ARGS__) MACROFOO(BAR,'!') 将扩展到: (BAR)("hello world%c",'!') 用括号和 myprintf("hello world%c",'!') 如果你删除它们. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |