[Python-checkins] Doc: define PY_SSIZE_T_CLEAN always (GH-12794)
Miss Islington (bot)
webhook-mailer at python.org
Fri Apr 12 21:56:55 EDT 2019
https://github.com/python/cpython/commit/be63df287a4a12ad86b4a2aec4358a1309f0488b
commit: be63df287a4a12ad86b4a2aec4358a1309f0488b
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2019-04-12T18:56:50-07:00
summary:
Doc: define PY_SSIZE_T_CLEAN always (GH-12794)
(cherry picked from commit c88feceb449d6e85d7e17ec36559206094d10d81)
Co-authored-by: Inada Naoki <songofacandy at gmail.com>
files:
M Doc/c-api/intro.rst
M Doc/extending/embedding.rst
M Doc/extending/extending.rst
M Doc/faq/extending.rst
M Doc/includes/custom.c
M Doc/includes/custom2.c
M Doc/includes/custom3.c
M Doc/includes/custom4.c
M Doc/includes/run-func.c
M Doc/includes/sublist.c
diff --git a/Doc/c-api/intro.rst b/Doc/c-api/intro.rst
index 15006100c736..330871bc2ae3 100644
--- a/Doc/c-api/intro.rst
+++ b/Doc/c-api/intro.rst
@@ -48,7 +48,8 @@ Include Files
All function, type and macro definitions needed to use the Python/C API are
included in your code by the following line::
- #include "Python.h"
+ #define PY_SSIZE_T_CLEAN
+ #include <Python.h>
This implies inclusion of the following standard headers: ``<stdio.h>``,
``<string.h>``, ``<errno.h>``, ``<limits.h>``, ``<assert.h>`` and ``<stdlib.h>``
@@ -60,6 +61,9 @@ This implies inclusion of the following standard headers: ``<stdio.h>``,
headers on some systems, you *must* include :file:`Python.h` before any standard
headers are included.
+ It is recommended to always define ``PY_SSIZE_T_CLEAN`` before including
+ ``Python.h``. See :ref:`arg-parsing` for a description of this macro.
+
All user visible names defined by Python.h (except those defined by the included
standard headers) have one of the prefixes ``Py`` or ``_Py``. Names beginning
with ``_Py`` are for internal use by the Python implementation and should not be
diff --git a/Doc/extending/embedding.rst b/Doc/extending/embedding.rst
index 7e4fc19db83b..13d83b72f82a 100644
--- a/Doc/extending/embedding.rst
+++ b/Doc/extending/embedding.rst
@@ -53,6 +53,7 @@ interface. This interface is intended to execute a Python script without needing
to interact with the application directly. This can for example be used to
perform some operation on a file. ::
+ #define PY_SSIZE_T_CLEAN
#include <Python.h>
int
diff --git a/Doc/extending/extending.rst b/Doc/extending/extending.rst
index b788a5575b3f..afed3aabb79a 100644
--- a/Doc/extending/extending.rst
+++ b/Doc/extending/extending.rst
@@ -55,8 +55,9 @@ called ``spam``, the C file containing its implementation is called
:file:`spammodule.c`; if the module name is very long, like ``spammify``, the
module name can be just :file:`spammify.c`.)
-The first line of our file can be::
+The first two lines of our file can be::
+ #define PY_SSIZE_T_CLEAN
#include <Python.h>
which pulls in the Python API (you can add a comment describing the purpose of
@@ -68,6 +69,9 @@ the module and a copyright notice if you like).
headers on some systems, you *must* include :file:`Python.h` before any standard
headers are included.
+ It is recommended to always define ``PY_SSIZE_T_CLEAN`` before including
+ ``Python.h``. See :ref:`parsetuple` for a description of this macro.
+
All user-visible symbols defined by :file:`Python.h` have a prefix of ``Py`` or
``PY``, except those defined in standard header files. For convenience, and
since they are used extensively by the Python interpreter, ``"Python.h"``
@@ -729,7 +733,8 @@ it returns false and raises an appropriate exception.
Here is an example module which uses keywords, based on an example by Geoff
Philbrick (philbrick at hks.com)::
- #include "Python.h"
+ #define PY_SSIZE_T_CLEAN /* Make "s#" use Py_ssize_t rather than int. */
+ #include <Python.h>
static PyObject *
keywdarg_parrot(PyObject *self, PyObject *args, PyObject *keywds)
@@ -1228,7 +1233,7 @@ The function :c:func:`spam_system` is modified in a trivial way::
In the beginning of the module, right after the line ::
- #include "Python.h"
+ #include <Python.h>
two more lines must be added::
diff --git a/Doc/faq/extending.rst b/Doc/faq/extending.rst
index 74e1af6ef24d..2ad276587052 100644
--- a/Doc/faq/extending.rst
+++ b/Doc/faq/extending.rst
@@ -280,6 +280,7 @@ solution then is to call :c:func:`PyParser_ParseString` and test for ``e.error``
equal to ``E_EOF``, which means the input is incomplete. Here's a sample code
fragment, untested, inspired by code from Alex Farber::
+ #define PY_SSIZE_T_CLEAN
#include <Python.h>
#include <node.h>
#include <errcode.h>
@@ -318,6 +319,7 @@ complete example using the GNU readline library (you may want to ignore
#include <stdio.h>
#include <readline.h>
+ #define PY_SSIZE_T_CLEAN
#include <Python.h>
#include <object.h>
#include <compile.h>
diff --git a/Doc/includes/custom.c b/Doc/includes/custom.c
index fb2c7b2a430e..13d16f5424ae 100644
--- a/Doc/includes/custom.c
+++ b/Doc/includes/custom.c
@@ -1,3 +1,4 @@
+#define PY_SSIZE_T_CLEAN
#include <Python.h>
typedef struct {
diff --git a/Doc/includes/custom2.c b/Doc/includes/custom2.c
index 51ab4b80d680..6477a19dafed 100644
--- a/Doc/includes/custom2.c
+++ b/Doc/includes/custom2.c
@@ -1,3 +1,4 @@
+#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include "structmember.h"
diff --git a/Doc/includes/custom3.c b/Doc/includes/custom3.c
index 09e87355b91a..213d0864ce1c 100644
--- a/Doc/includes/custom3.c
+++ b/Doc/includes/custom3.c
@@ -1,3 +1,4 @@
+#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include "structmember.h"
diff --git a/Doc/includes/custom4.c b/Doc/includes/custom4.c
index 0994d8fda0e5..b0b2906dbdc8 100644
--- a/Doc/includes/custom4.c
+++ b/Doc/includes/custom4.c
@@ -1,3 +1,4 @@
+#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include "structmember.h"
diff --git a/Doc/includes/run-func.c b/Doc/includes/run-func.c
index 9caf1fdb2010..392f86d65ecc 100644
--- a/Doc/includes/run-func.c
+++ b/Doc/includes/run-func.c
@@ -1,3 +1,4 @@
+#define PY_SSIZE_T_CLEAN
#include <Python.h>
int
diff --git a/Doc/includes/sublist.c b/Doc/includes/sublist.c
index 376dddfac09c..76ff93948cfd 100644
--- a/Doc/includes/sublist.c
+++ b/Doc/includes/sublist.c
@@ -1,3 +1,4 @@
+#define PY_SSIZE_T_CLEAN
#include <Python.h>
typedef struct {
More information about the Python-checkins
mailing list