Passing an ellipsis to another variadic function [duplicate]
You can't, you can only pass the arguments as a va_list
. See the comp.lang.c FAQ.
In general, if you're writing variadic functions (that is, functions which take a variable number of arguments) in C, you should write two versions of each function: one which takes an ellipsis (...
), and one which takes a va_list
. The version taking an ellipsis should call va_start
, call the version taking a va_list
, call va_end
, and return. There's no need for code duplication between the two versions of the function, since one calls the other.
Probably you can use variadic macros - like this:
#define FOO(...) do { do_some_checks; myfun(__VA_ARGS__); } while (0)
NB! Variadic macros are C99-only
I don't know if this will help, you can access the variables by reference. This is kind of a sneaky trick, but it unfortunately won't allow you to use ellipsis in the final function definition.
#include <stdio.h>void print_vars(int *n){ int i; for(i=0;i<=*n;i++) printf("%X %d ", (int)(n+i), *(n+i)); printf("\n");}void pass_vars(int n, ...){ print_vars(&n);}int main(){ pass_vars(4, 6, 7, 8, 0); return 0;}
On my pc it outputs
$ ./a.outBFFEB0B0 4 BFFEB0B4 6 BFFEB0B8 7 BFFEB0BC 8 BFFEB0C0 0