Skip to contentSkip to conversation

gcc issue ?

Linux-ia64 Ram Menon 2 participants 2 messages Jun 12, 2001 – Jun 13, 2001

lore
Share & tools
lore

Ram Menon

author
#0 lore raw

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

#1 lore raw
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