gcc issue ?
Hi,
Following program fails compilation on linux ia64 os, but works on other os's.
#include <stdarg.h>
main()
{
f(1, 'c', 10);
}
f(char a, ...)
{
int cval;va_list args;va_start(args, a);
cval = va_arg(args, char);
}
[root@timba /root]# cc main.c -o main
main.c:10: warning: type mismatch with previous implicit declaration main.c:6: warning: previous implicit declaration of f' main.c: In function f':
main.c:16: char' is promoted to int' when passed through ...' main.c:16: (so you should pass int' not char' to va_arg')
Is va_arg(args, int) same as va_arg(args, char) for char arg ?.
thanks
Quoted 1 line
cval =
va_arg(args, char);
This isn't valid ISO C. You must use promoted types when calling va_args, and hence you must use int here, just like the error message says.
Older versions of gcc, and many other compilers tend to accept this, with various results, e.g. sometimes it works, sometimes it doesn't. New versions of gcc always give an error at compile time.
Quoted 2 lines
Following program fails compilation on linux ia64 os, but works on other os's.
This isn't IA-64 specific behaviour. If you use a new gcc, it will give this same error on all systems.
Jim