【发布时间】:2017-06-22 11:52:20
【问题描述】:
我有以下函数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?
我的问题是,如何从func() 内部调用函数foo()?
请提出任何可能的实施方案。
【问题讨论】:
-
听起来你需要一个可变参数宏。
-
你为什么要使用宏?当函数也可以完成工作时,切勿使用宏!并且宏的第一个版本具有误导性并混淆了您的代码。
-
请提供
func()的定义。 -
嗨 olaf,我只更改了我现有项目中宏的内部实现。所以我不能改变宏的用法。我只能改变它的实现
-
嗨 kampling ,例如我说过 func()。实际上我需要知道如何在 func() 中调用 foo()
标签: c c-preprocessor stringification