From: Inada Naoki Date: Fri, 30 Aug 2019 23:48:12 +0000 (+0900) Subject: bpo-37781: use "z" for PY_FORMAT_SIZE_T (GH-15156) X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d765d81b8fb5ab707bfe8b079348e5038c298aa3;p=python bpo-37781: use "z" for PY_FORMAT_SIZE_T (GH-15156) MSVC 2015 supports %zd / %zu. "z" is portable enough nowadays. --- diff --git a/Include/pyport.h b/Include/pyport.h index 32d98c59a7..19415001c5 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -133,8 +133,9 @@ typedef int Py_ssize_clean_t; /* 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. - * C99 introduced "z" for this purpose, but not all platforms support that; - * e.g., MS compilers use "I" instead. + * C99 introduced "z" for this purpose, but old MSVCs had not supported it. + * 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 * all platforms (Python interprets the format string itself, and does whatever @@ -152,19 +153,11 @@ typedef int Py_ssize_clean_t; * Py_ssize_t 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 - * Py_ssize_t on the platform. + * That will expand to %zd or to something else correct for a Py_ssize_t on + * the platform. */ #ifndef PY_FORMAT_SIZE_T -# if SIZEOF_SIZE_T == SIZEOF_INT && !defined(__APPLE__) -# 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 +# define PY_FORMAT_SIZE_T "z" #endif /* Py_LOCAL can be used instead of static to get the fastest possible calling