65.9K
CodeProject is changing. Read more.
Home

Variable Arguments in Functions

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.70/5 (9 votes)

Jun 24, 2004

viewsIcon

39321

Simple brief on how to use variable arguments.

Introduction

C++ variable argument functions are useful wherever we are not sure about the number of parameters to be passed. Not all the compilers have the ability to decipher variable arguments. But C++ compiler has the capability to decrypt a variable argument function and provide the parameter values inside the function.

Variable Arguments

The first confusion that would arise when using a variable argument is to identify the type of the variable. The data type of the variable should be known prior to using it in a variable argument function. The algorithm/code inside the function should be able to manipulate the data properly.

The argument values can be retrieved by using the va_arg, va_start and va_end macros. These macros assume that the function will be called with a fixed number of required parameters and variable number of optional parameters.

The following sample program uses a function Add with variable arguments and returns the value of the added items:

#include <stdio.h>
#include <stdargs.h>int Add(int a,int b,...)
{
  //This one handles 4 arguments in total.
  int l_ParamVal=0;
  int total=0;
  int i;

  //Declare a va_list macro and initialize it with va_start
  va_list l_Arg;
  va_start(l_Arg,a);

  //The required parameters can also be accessed directly
  l_ParamVal = a;
  printf("%d\n",l_ParamVal);
  if(l_ParamVal != -1)
    total = total +l_ParamVal;

  l_ParamVal = va_arg(l_Arg,int);
  printf("%d\n",l_ParamVal);
  if(l_ParamVal != -1)
    total = total +l_ParamVal;

  l_ParamVal = va_arg(l_Arg,int);
  printf("%d\n",l_ParamVal);
  if(l_ParamVal != -1)
    total = total +l_ParamVal;

  l_ParamVal = va_arg(l_Arg,int);
  printf("%d\n",l_ParamVal);
  if(l_ParamVal != -1)
    total = total +l_ParamVal;

  va_end(l_Arg);

  return total;
}

void main()
{
  printf("Total of C++ Variable Arguments: %d\n",Add(2,3,4));
}

The above sample takes some integer parameters and returns their added result. This function can handle up to 4 parameters.