How to count the number of arguments passed to a function that accepts a variable number of arguments?

codeomnitrix picture codeomnitrix · Dec 12, 2010 · Viewed 47.9k times · Source

How to count the no of arguments passed to the function in following program:

#include<stdio.h>
#include<stdarg.h>
void varfun(int i, ...);
int main(){
        varfun(1, 2, 3, 4, 5, 6);
        return 0;
}
void varfun(int n_args, ...){
        va_list ap;
        int i, t;
        va_start(ap, n_args);
        for(i=0;t = va_arg(ap, int);i++){
               printf("%d", t);
        }
        va_end(ap);
}

This program's output over my gcc compiler under ubuntu 10.04:

234561345138032514932134513792

so how to find how many no. of arguments actually passed to the function?

Answer

Alexandre C. picture Alexandre C. · Dec 12, 2010

You can't. You have to manage for the caller to indicate the number of arguments somehow. You can:

  • Pass the number of arguments as the first variable
  • Require the last variable argument to be null, zero or whatever
  • Have the first argument describe what is expected (eg. the printf format string dictates what arguments should follow)