I have been trying to pass variable arguments to other function in C but it is producing inconsistent result in different runtime environment as well as in different runs in sam
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("\n");
va_end(args);
return result;
}
int main()
{
int result = printfln("Something \n %d", 9);
printf("(%d)\n", 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.