C语言 传递3点参数给另一个函数



我有一个名为foo的函数,该函数接受...,我想将在...中传递的所有参数传递给名为oof的函数,示例代码:

#include <stdio.h>
#include <stdarg.h>

void oof(FILE * f, const char * fmt, ...){
va_list args;
va_start(args, fmt);
vfprintf(f, fmt, args);
va_end(args);
}
void foo(const char * fmt, ...){
oof(stdout, fmt, ...); // how can I pass the 3 dots?
// do other things in the function block
}
int main(int argc, char *argv[]){
foo("Hello %sn", "World");
}

我不想传递给oof一个va_list,但参数本身

您需要更改oof以接受va_list并传递它。

void oof(FILE * f, const char * fmt, va_list args){
vfprintf(f, fmt, args);
}
void foo(const char * fmt, ...){
va_list args;
va_start(args, fmt);
oof(stderr, fmt, args);
va_end(args);
}

不能通过函数来实现,但可以通过宏来实现:

#define foo(...) oof(__VA_ARGS__)

还有一个问题。

你从哪里得到FILE *f参数?假设它是stdout,那么将宏定义为:

#define foo(...) oof(stdout, __VA_ARGS__)

,如果你想消除一些参数(做上面的逆,只需做以下操作:

#define foo(a, b, ...) oof(__VA_ARGS__)

这与dbush的回答(dbush)相似应该得到信任-不要接受我的答案而不是他们的),但由于OP的声明而略有修改:

我不想传递给oof一个va_list,但参数本身

因为va_list需要传递给某些东西,我定义了一个不同的函数voof,由ooffoo调用:

#include <stdio.h>
#include <stdarg.h>
void voof(FILE * f, const char * fmt, va_list args){
vfprintf(f, fmt, args);
}
void oof(FILE * f, const char * fmt, ...){
va_list args;
va_start(args, fmt);
voof(f, fmt, args);
va_end(args);
}
void foo(const char * fmt, ...){
va_list args;
va_start(args, fmt);
voof(stderr, fmt, args);
va_end(args);
}
int main(int argc, char *argv[]){
foo("Hello %sn", "World");
}

foooof目前做同样的事情,除了oof中额外的FILE *参数。

相关内容

  • 没有找到相关文章

最新更新