Variable number of parameters... C/C++ vs C#
A friend and I were talking about variable length parameter lists in C/C++ the other day and neither of us knew how to do it. We knew there must be some way because of the printf function. Just out of curiosity I did some googling and figured out how to do it.
Just incase you have the same curiosity here is a sample from this MSDN article on how to do it (NOTE that this C/C++ code was taken straight from the article I just included it here for comparison purposes)
int average( int first, ... )
{
int count = 0, sum = 0, i = first;
va_list marker;
va_start( marker, first );
while( i != -1 )
{
sum += i;
count++;
i = va_arg( marker, int);
}
va_end( marker );
return( sum ? (sum / count) : 0 );
}
So in order to write a function in C/C++ that accepts a variable number of parameters you need to do the following:
- Have at least one required parameter
- Use "..." to signify a variable number of parameters
- Use va_start, va_arg, and va_end to interact with the parameters
- When calling this function you will need to pass in a flag/sentinel to signify the end of the variable list
Just for comparsion here is a function that does the same thing in C#
int Average(params int[] ints)
{
int total = 0;
foreach(int i in ints)
total += i;
return (ints.Length > 0 ? total / ints.Length : 0);
}
So to do this in C# you just use the keyword params in front of an array parameter and you get a variable number of parameters.