我有以下函数foo()
和宏FOO(str)
。
void foo(const char *fmt, ...) {
va_list args;
va_start(args,fmt);
vsprintf(msgbuff,fmt,args);
va_end(args);
printf("%s\n",msgbuff);
}
#define FOO(str)\
foo str; // No need of brackets as they are coming in 'str'
我曾经像下面这样调用宏:
FOO(("My %s is %s\n","Name","Bala"));
现在我的要求是:
宏FOO(str)
不应该直接调用我的函数foo()
,而应该通过func()
等其他函数调用它。
最后我的宏应该如下
#define FOO(str)\
func(#str) // Do I need to Stringizing str?
我的问题是,如何从foo()
内部调用函数func()
?
请提出任何可能的实施建议。
答案 0 :(得分:-1)
您可以使用variadic宏
#define FOO(...) \
fun(__VA_ARGS__);
并像这样称呼它
FOO("A", "B", "C")
编辑:
正如奥拉夫指出的那样,不鼓励这种做法,可以用直接函数调用取代