函数和字符串中的宏

时间:2017-06-22 11:52:21

标签: c c-preprocessor stringification

我有以下函数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()? 请提出任何可能的实施建议。

1 个答案:

答案 0 :(得分:-1)

您可以使用variadic宏

#define FOO(...) \
fun(__VA_ARGS__);

并像这样称呼它

FOO("A", "B", "C")

编辑:

正如奥拉夫指出的那样,不鼓励这种做法,可以用直接函数调用取代