C Programming - Variable Number of Arguments - Discussion

Discussion Forum : Variable Number of Arguments - Find Output of Program (Q.No. 1)
1.
What will be the output of the program?
#include<stdio.h>
#include<stdarg.h>
void fun(char *msg, ...);

int main()
{
    fun("IndiaBIX", 1, 4, 7, 11, 0);
    return 0;
}
void fun(char *msg, ...)
{
    va_list ptr;
    int num;
    va_start(ptr, msg);
    num = va_arg(ptr, int);
    num = va_arg(ptr, int);
    printf("%d", num);
}
IndiaBIX 1 7 11 0
1
4
7
Answer: Option
Explanation:
No answer description is available. Let's discuss.
Discussion:
34 comments Page 1 of 4.

Manish roy said:   7 years ago
First of all va_start and va_arg are a macro defined in stdarg.h header file.

Va_list type is also defined in the stdarg.h,
Here ptr is va_list type variable.

Va_start macro and int parameter is used to initialize the va_list variable to an argument list.
Then we use va_arg macro and va_list variable to access each item in an argument list.
So num=va_arg(ptr,int); assigns integer value to num i.e.1.
Then the second statement num=va_arg(ptr,int);assigns 4 to num.
Then printf statement is given so 4 is printed and hence the output.
(1)

Suhas said:   9 years ago
1. There are three macros available in file "stdarg.h" --->.

- va_start: is used to initialize the pointer to the beginning of the list of optional arguments.
- va_arg: is used to advance the pointer to next argument *.
- va_list: va_list is like any other type.

Akash said:   1 decade ago
What does it mean va_start(ptr, msg);?

Lavanya said:   1 decade ago
#include<stdio.h>
#include<stdarg.h>
void fun(char *msg, ...);

int main()
{
fun("IndiaBIX", 1, 4, 7, 11, 0);
return 0;
}
void fun(char *msg, ...)
{
va_list ptr; /* create a new list ptr */
int num;
va_start(ptr, msg); /* attach ptr with msg */
num = va_arg(ptr, int); /* fetch 2nd argument */
num = va_arg(ptr, int); /* fetch 3rd argument */
printf("%d", num);
}

Yogeshwar Singh said:   1 decade ago
What is the meaning of attach ptr with pointer and why we need to do so ?

va_start(ptr, msg); /* attach ptr with msg */

ALEX said:   1 decade ago
Why we use ... (only 3 dots) for variable arguments?

Raman kumar said:   1 decade ago
I think num = va_arg(ptr, int);

Keep the value 6 in num and this statement num = va_arg(ptr, int); hold 1 as it is true.

Sri lakshmi said:   1 decade ago
What is va_arg() do?

Vandana said:   10 years ago
Va_list ptr;

Va_list is not struct name than why we are creating a new pointer of Va_list type.

What is this? Is any data type?

Is Va_start is builtin function?

I am very confused please tell me the every thing in a proper manner.

Supriya said:   10 years ago
The C library macro type va_arg(va_list ap, type) retrieves the next argument in the parameter list of the function with type.


Post your comments here:

Your comments will be displayed after verification.