Mail Archives: djgpp/2003/04/20/11:26:52
"Eric Sosman" <esosman AT acm DOT org> said:
> > #include <stdarg.h>
> > char x;
> > void foo (va_list arg)
>
> Hold on; stop right there. You've included <stdarg.h>, but you're
> using the argument list declaration from the pre-Standard <varargs.h>
> (or <vararg.h> with some compilers). The two are not the same, they
> are not interchangeable, and they are *definitely* not miscible.
You mean using "va_list" is pre-standard? (it's used in <stadarg.h>)
That's funny since djgpp uses it all the time. Have a look at e.g.
src\libc\ansi\stdio\doprnt.c.
> > x = va_arg (arg, char);
>
> This will be wrong with either <stdarg.h> or <varargs.h>, since
> the actual type of the parameter is not `char' but whatever `char'
> gets promoted to: `int' on most machines, but perhaps `unsigned int'
> on some oddball architectures. You must specify the promoted type,
> not the type to which you will later "demote" it.
Yes, I know. I use "x = (char) va_arg(arg,int)" to stop gcc complaining.
But my question is why the "int $5" is generated. I guess it's meant to
generated some trap on some system. But neither djgpp nor MingW
have a int 5 handler.
--gv
- Raw text -