How to count the number of arguments passed to a function that accepts a variable number of arguments?
c, variadic-functions
Solution
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)
Problem
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?