Open In App

Variable Length Argument in C

Variable length argument is a feature that allows a function to receive any number of arguments. There are situations where we want a function to handle variable number of arguments according to requirement. 1) Sum of given numbers. 2) Minimum of given numbers. and many more. Variable number of arguments are represented by three dotes (…) Below is an example, to find minimum of given set of integers. 




// C program to demonstrate use of variable
// number of arguments.
#include <stdarg.h>
#include <stdio.h>
 
// this function returns minimum of integer
// numbers passed.  First argument is count
// of numbers.
int min(int arg_count, ...)
{
    int i;
    int min, a;
 
    // va_list is a type to hold information about
    // variable arguments
    va_list ap;
 
    // va_start must be called before accessing
    // variable argument list
    va_start(ap, arg_count);
 
    // Now arguments can be accessed one by one
    // using va_arg macro. Initialize min as first
    // argument in list
    min = va_arg(ap, int);
 
    // traverse rest of the arguments to find out minimum
    for (i = 2; i <= arg_count; i++)
        if ((a = va_arg(ap, int)) < min)
            min = a;
 
    // va_end should be executed before the function
    // returns whenever va_start has been previously
    // used in that function
    va_end(ap);
 
    return min;
}
 
// Driver code
int main()
{
    int count = 5;
    printf("Minimum value is %d", min(count, 12, 67, 6, 7, 100));
    return 0;
}

Here we use macros to implement the functionality of variable arguments.



int a_function(int x, ...)
{
    va_list a_list;
    va_start( a_list, x );
}

Another Example : 




// C program to demonstrate working of
// variable arguments to find average
// of multiple numbers.
#include <stdarg.h>
#include <stdio.h>
 
int average(int num, ...)
{
    va_list valist;
 
    int sum = 0, i;
 
    va_start(valist, num);
    for (i = 0; i < num; i++)
        sum += va_arg(valist, int);
 
    va_end(valist);
 
    return sum / num;
}
 
// Driver code
int main()
{
    printf("Average of {3, 4} = %d\n",
                         average(2, 3, 4));
    printf("Average of {5, 10, 15} = %d\n",
                      average(3, 5, 10, 15));
    return 0;
}

Output:



Average of {3, 4} = 3
Average of {5, 10, 15} = 10

Article Tags :