[Python-Dev] PY_FORMAT_SIZE_T warnings on OS X
Tim Peters
tim.peters at gmail.com
Sun Apr 2 03:22:24 CEST 2006
[Brett Cannon]
> ...
> This is just so ridiculous.
Ya think ;-)?
> Is there even a way to do this reasonably?
Not really in C89. That's why C99 introduced the "z" printf modifier,
and approximately a billion ;-) format macros like PY_FORMAT_SIZE_T
(since there's almost nothing portably useful you can say about
standard C's billion names for "some kind of integer"). In effect,
the PY_FORMAT_SIZE_T case was important enough that C99 moved it
directly into the printf format syntax.
> Would we have to detect when Py_ssize_t resolves to either int or long
It's worse that that: there's no guarantee that sizeof(Py_ssize_t) <=
sizeof(long), and it fact it's not on Win64. But Windows is already
taken care of here.
> OK, so how should we solve this one? Or should we just ignore it and
> hope gcc eventually wises up and starting using structural equivalence
> for its printf checks? =)
For gcc we _could_ solve it in the obvious way, which I guess Martin
was hoping to avoid: change Unixish config to detect whether the
platform C supports the "z" format modifier (I believe gcc does), and
if so arrange to stick
#define PY_FORMAT_SIZE_T "z"
in the generated pyconfig.h. Note that if pyconfig.h defines
PY_FORMAT_SIZE_T, pyport.h believes whatever that says. It's the
purpose of "z" to format size_t-ish arguments, so gcc complaints
should end then.
More information about the Python-Dev
mailing list