On Sun, 10 Aug 2003, Thiemo Seufer wrote:
> Chip Coldwell wrote:
> [snip]
> > > printf("%016x\n", ~a);
> > >
> > > return 0;
> > > }
> > >
> > > outputs
> > >
> > > 00000000ffffffff
> > >
> > > on my i386-linux system.
> >
> > Strangely, this is actually "correct" behavior. Arguments on
> > variable-length argument lists are implicitly "promoted" to unsigned
> > int at the widest. See K&R 2nd ed. A6.1 and A7.3.2.
>
> Ugh. Thanks for pointing this out. I wasn't aware of it.
>
> printf("%016Lx\n", ~a);
>
> Produces the expected output. So it is actually an implementation
> bug in binutils, which isn't fixable for 2.14 and earlier, because
> those have to remain at K&R C level. The K&R requirement was only
> recenly loosened.
How can it print the correct output if ~a is `promoted' to unsigned int, while
you specify %Lx in the format string?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
|