You cannot pass the variadic arguments to a variadic function. Instead, you must call a function that takes a va_list
as argument. The standard library provides variants of printf
and scanf
that take a va_list
; their names have the prefix v
.
Your example should look like:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
int printfln(const char *format, ...)
{
int result;
va_list args;
va_start(args, format);
result = vprintf(format, args);
printf("
");
va_end(args);
return result;
}
int main()
{
int result = printfln("Something
%d", 9);
printf("(%d)
", result);
return 0;
}
There are some gotchas, for example when you want to call two v...
function for printing to the screen and a log file: The v...
function may exhaust the va_list
, so you must pass in a fresh one to each call if your code should be portable.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…