I’m getting a warning by the gcc compiler and the program aborts if the following code is executed I couldn’t get why? Would be great help if someone clarified it.
#include<stdio.h>
#include<stdarg.h>
int f(char c,...);
int main()
{
char c=97,d=98;
f(c,d);
return 0;
}
int f(char c,...)
{
va_list li;
va_start(li,c);
char d=va_arg(li,char);
printf("%c\n",d);
va_end(li);
}
GCC tells me this:
warning: 'char’ is promoted to ‘int’ when passed through ‘...’ [enabled by default]
note: (so you should pass ‘int’ not ‘char’ to ‘va_arg’)
note: if this code is reached, the program will abort
Arguments to variadic functions undergo default argument promotions; anything smaller than an
int(such aschar) is first converted to anint(andfloatis converted todouble).So
va_arg(li,char)is never correct; useva_arg(li,int)instead.