[Python-Dev] test_itertools fails for trunk on x86 OS X machine
tim.peters at gmail.com
Fri Sep 22 08:12:07 CEST 2006
> It looks like %zd of a negative number is treated as an unsigned
> number on OS X, even though the man page says it should be signed.
> The z modifier, when applied to a d or i conversion, indicates that
> the argument is of a signed type equivalent in size to a size_t.
It's not just some man page ;-), this is required by the C99 standard
(which introduced the `z` length modifier -- and it's the `d` or `i`
here that imply `signed`, `z` is only supposed to specify the width of
the integer type, and can also be applied to codes for unsigned
integer types, like %zu and %zx).
> The program below returns -123 on Linux and 4294967173 on OS X.
> #include <stdio.h>
> int main()
> char buffer;
> if(sprintf(buffer, "%zd", (size_t)-123) < 0)
> return 1;
> printf("%s\n", buffer);
> return 0;
Well, to be strictly anal, while the result of
is defined, the result of casting /that/ back to a signed type of the
same width is not defined. Maybe your compiler was "doing you a
More information about the Python-Dev