C/C++ language supports variable argument function or variadic function. The prototype defines a single defined argument along with undefined number of arguments.
Prototype Syntax:
Int v_printf(char string, ...);
The three dots indicate the functions can take more than one/many arguments.
Argument parsing: Arguments are pushed in the stack from right to left one by one. Each argument takes a size of integer in stack. For data types whose sizes are greater than integer, double or multiples of integer size are taken.
Code Example: #include<stdarg.h> int v_printf(int arg_count, ...) { va_list vl; int i_arg, i; va_start( vl, arg_count ); for(i = 0; i < arg_count; i++) { i_arg = va_arg( vl, int ); printf("Argument %d = %d\n", i, i_arg); } va_end(vl); return 0; } int main(int argc, char *argv[]) { v_printf(2, 1, 2); return 0; }
Inside the function, we take the va_list and initialize with the first argument. va_start() macro takes the address of the first argument and advances itself to the next argument. Now with each iteration we call va_arg() which actually returns the value of the current type and the pointer to the next argument. In this way we get the value of each argument and the va_list pointer advances to the next argument.
Macros are defined as: #define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) ) #define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) #define va_end(ap) ( ap = (va_list)0 )
About our authors: Team EQA
You have viewed 1 page out of 248. Your C learning is 0.00% complete. Login to check your learning progress.
Questions index C Questions C++ Questions Win32 MFC COM/DCOM DLL Questions
Compilers & Editors
Download Visual Studio Download XCode Download Visual Studio Code Android studio install sdk Eclipse installer Best C compilers IDEs
Development system setup
Windows media creation tool MSDN subscription Ubuntu virtualbox
New updated posts
Why learn C? Draw on printer Memory leaks