One usually need to implement a function where the number of arguments (parameters) is not known, or is not constant, when the function is written. Just like the printf function. The following example shows that in terms of code:
int f(int, ... ) {
.
.
.
}
int g() {
f(1,2,3);
f(1,2);
}
Let's consider a simple example, we need to implement a function GetSum that calculates the summation of any number of integers.
So, such function takes variable number of arguments.
The first one is Size: the number of integers to calculate the summation for.
Then it takes each integer of the numbers to be added as a separate parameter.
You can call it to calculate the summation of two numbers (4+30), like :
GetSum(2, 4, 30); /* returns 34 */
Or to calculate the summation of 5 numbers (7+10+1+15+3), like :
GetSum(5, 7, 10, 1, 15, 3); /* returns 36 */
The implementation of GetSum is as follows. The comments describe everything:
#include <stdarg.h>
int GetSum(int Size, ...)
{
int Sum = 0.0;
// 1- Create Variable List
va_list variable_list;
// 2- Initialize variable_list to retrieve data
// starting from the address of the parameter Size
va_start(variable_list, Size );
// 3- Access all the arguments assigned to variable_list
for (int Index = 0; Index < Size; Index++ ) {
Sum += va_arg(variable_list, int);
}
// 4- Clean memory reserved for variable_list
va_end(variable_list);
return Sum;
}