Latest Posts

Tuesday, December 4, 2007

Pass Multiple Arguments to Function

In our day to day programing life we find some situation when we need to pass multiple arguments at run time . we dont know the number of arguments to be passed by the user.

JavaScript
I find javaScript more handy. JavaScript provide a special property called " arguments " which contains the array of arguments passed to the function.
we can take this in an array and by length property of array we know the number of arguments passed.


function myFunc()
{
var arguments = myFunc.arguments;
for (var i = 0; i < arguments.length; i++) {
alert("Argument number " + i + " value = " + arguments[i]);
}
}

This function can be called with any number of arguments at the runtime like
vikFunc('neeraj', 'raju');
vikFunc('neeraj', 'raju','vinay','amole');

C++

In c++ we use '...'(three dots) for passing multiple arguments.The first argument of the function represents the number of argument to be passed and the second argument '...'(three dots) represents the values to be passed.First argument is int and second argument could be any thing like int, double etc .....

we also need four things va_list which stores the arguments , va_start which initializes the list , va_arg which returns the arguments in the list and va_end which cleans up the
variable in the list. To get these we must include the “cstdarg ” header file.

va_list is like any other variable.

va_start is a macro which accepts two arguments, a va_list and the name of the variable that directly precedes the '...'(three dots ) . So, in the function a_function, to initialize a_list with va_start, you would write va_start ( a_list, x );

va_arg takes a va_list and a variable type, and returns the next argument in the list in the form of whatever variable type it is told. It then moves down the list to the next argument.

#include
#include
using namespace std;

double average ( int num, ... )
{
va_list arguments; // A place to store the list of arguments
double sum = 0;
va_start ( arguments , num ); // Initializing arguments to store all values after num
for ( int x = 0; x < num; x++ ) // Loop until all numbers are added
sum += va_arg ( arguments, double ); // Adds the next value in argument list to
sum. va_end ( arguments );
// Cleans up the list
return sum / num; // Returns some number
}
int main()
{
cout<< average ( 3, 12.2, 22.3, 4.5 );
cout<< average(5,3.3,2.3,3.5,6.7,2.9);
}

3 comments: