Commit d765d81b authored by Inada Naoki's avatar Inada Naoki Committed by GitHub

bpo-37781: use "z" for PY_FORMAT_SIZE_T (GH-15156)

MSVC 2015 supports %zd / %zu.  "z" is portable enough nowadays.
parent 39d87b54
...@@ -133,8 +133,9 @@ typedef int Py_ssize_clean_t; ...@@ -133,8 +133,9 @@ typedef int Py_ssize_clean_t;
/* PY_FORMAT_SIZE_T is a platform-specific modifier for use in a printf /* PY_FORMAT_SIZE_T is a platform-specific modifier for use in a printf
* format to convert an argument with the width of a size_t or Py_ssize_t. * format to convert an argument with the width of a size_t or Py_ssize_t.
* C99 introduced "z" for this purpose, but not all platforms support that; * C99 introduced "z" for this purpose, but old MSVCs had not supported it.
* e.g., MS compilers use "I" instead. * Since MSVC supports "z" since (at least) 2015, we can just use "z"
* for new code.
* *
* These "high level" Python format functions interpret "z" correctly on * These "high level" Python format functions interpret "z" correctly on
* all platforms (Python interprets the format string itself, and does whatever * all platforms (Python interprets the format string itself, and does whatever
...@@ -152,19 +153,11 @@ typedef int Py_ssize_clean_t; ...@@ -152,19 +153,11 @@ typedef int Py_ssize_clean_t;
* Py_ssize_t index; * Py_ssize_t index;
* fprintf(stderr, "index %" PY_FORMAT_SIZE_T "d sucks\n", index); * fprintf(stderr, "index %" PY_FORMAT_SIZE_T "d sucks\n", index);
* *
* That will expand to %ld, or %Id, or to something else correct for a * That will expand to %zd or to something else correct for a Py_ssize_t on
* Py_ssize_t on the platform. * the platform.
*/ */
#ifndef PY_FORMAT_SIZE_T #ifndef PY_FORMAT_SIZE_T
# if SIZEOF_SIZE_T == SIZEOF_INT && !defined(__APPLE__) # define PY_FORMAT_SIZE_T "z"
# define PY_FORMAT_SIZE_T ""
# elif SIZEOF_SIZE_T == SIZEOF_LONG
# define PY_FORMAT_SIZE_T "l"
# elif defined(MS_WINDOWS)
# define PY_FORMAT_SIZE_T "I"
# else
# error "This platform's pyconfig.h needs to define PY_FORMAT_SIZE_T"
# endif
#endif #endif
/* Py_LOCAL can be used instead of static to get the fastest possible calling /* Py_LOCAL can be used instead of static to get the fastest possible calling
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment