# 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 ` `#include ` ` `  `// 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.

• Use va_list type variable in the function definition.
```int a_function(int x, ...)
{
va_list a_list;
va_start( a_list, x );
}```
• Use int parameter and va_start macro to initialize the va_list variable to an argument list. The macro va_start is defined in stdarg.h header file.
• Use va_arg macro and va_list variable to access each item in argument list.
• macro va_end to clean up the memory assigned to va_list variable.

Another Example :

 `// C program to demonstrate working of  ` `// variable arguments to find average ` `// of multiple numbers. ` `#include ` `#include ` ` `  `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 {2, 3, 4} = %d\n"``, ` `                         ``average(2, 3, 4)); ` `    ``printf``(``"Average of {3, 5, 10, 15} = %d\n"``, ` `                      ``average(3, 5, 10, 15)); ` `    ``return` `0; ` `} `

Output:

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

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

6

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.