I was just playing with Variable Arguments in C.
I wrote a function that keeps adding the numbers
(till you get a zero in the argument of the function)
Here's something I couldn't figure out:
The following code works :
Code:
#include <stdio.h>
#include <stdarg.h>
void add(char *say, ...)
{
int answer = 0;
int temparg = 0;
va_list argumentlist;
va_start(argumentlist, say);
while ((temparg = va_arg(argumentlist, int)) != 0)
{
answer = answer + temparg;
printf("temparg is %d\n", temparg);
}
printf("%s %d\n", say, answer);
va_end(argumentlist);
}
main()
{
add("Addition result: ", 1, 0);
add("Addition result: ", 1, 2, 0);
add("Addition result: ", 1, 2, 3, 0);
}
but this one doesn't :
Code:
#include <stdio.h>
#include <stdarg.h>
void add(char *say, ...)
{
int answer = 0;
int temparg = 0;
va_list argumentlist;
va_start(argumentlist, say);
while (va_arg(argumentlist, int) != 0)
{
temparg = va_arg(argumentlist, int);
answer = answer + temparg;
printf("temparg is %d\n", temparg);
}
printf("%s %d\n", say, answer);
va_end(argumentlist);
}
main()
{
add("Addition result: ", 1, 0);
add("Addition result: ", 1, 2, 0);
add("Addition result: ", 1, 2, 3, 0);
}
The only difference is in the while loop condition..
what could the reason be ?
Also, although I read the same paragraph several times,
I still didn't understand the real purpose of
va_list
va_start
va_end
if I say, va_list mahurshi
does it mean that "mahurshi" is like an array ?
why do we need to va_end ?
Thanks for your time and patience in reading this!
------------------------------------------------------------------------
If anyone is too proud to answer my questions politely,
I encourage him/her not to answer. No offence. Thanks.
------------------------------------------------------------------------