mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
gh-107298: Document PyMODINIT_FUNC macro (#109236)
Document PyMODINIT_FUNC macro. Remove links to PyAPI_FUNC() and PyAPI_DATA() macros since they are not documented. These macros should only be used to define the Python C API. They should not be used outside Python code base.
This commit is contained in:
parent
1f885df2a5
commit
d7a27e527d
3 changed files with 27 additions and 3 deletions
|
@ -105,6 +105,30 @@ defined closer to where they are useful (e.g. :c:macro:`Py_RETURN_NONE`).
|
||||||
Others of a more general utility are defined here. This is not necessarily a
|
Others of a more general utility are defined here. This is not necessarily a
|
||||||
complete listing.
|
complete listing.
|
||||||
|
|
||||||
|
.. c:macro:: PyMODINIT_FUNC
|
||||||
|
|
||||||
|
Declare an extension module ``PyInit`` initialization function. The function
|
||||||
|
return type is :c:expr:`PyObject*`. The macro declares any special linkage
|
||||||
|
declarations required by the platform, and for C++ declares the function as
|
||||||
|
``extern "C"``.
|
||||||
|
|
||||||
|
The initialization function must be named :samp:`PyInit_{name}`, where
|
||||||
|
*name* is the name of the module, and should be the only non-\ ``static``
|
||||||
|
item defined in the module file. Example::
|
||||||
|
|
||||||
|
static struct PyModuleDef spam_module = {
|
||||||
|
PyModuleDef_HEAD_INIT,
|
||||||
|
.m_name = "spam",
|
||||||
|
...
|
||||||
|
};
|
||||||
|
|
||||||
|
PyMODINIT_FUNC
|
||||||
|
PyInit_spam(void)
|
||||||
|
{
|
||||||
|
return PyModule_Create(&spam_module);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.. c:macro:: Py_ABS(x)
|
.. c:macro:: Py_ABS(x)
|
||||||
|
|
||||||
Return the absolute value of ``x``.
|
Return the absolute value of ``x``.
|
||||||
|
|
|
@ -855,8 +855,8 @@ Example on Linux x86-64::
|
||||||
At the beginning of the files, C extensions are built as built-in modules.
|
At the beginning of the files, C extensions are built as built-in modules.
|
||||||
Extensions defined after the ``*shared*`` marker are built as dynamic libraries.
|
Extensions defined after the ``*shared*`` marker are built as dynamic libraries.
|
||||||
|
|
||||||
The :c:macro:`PyAPI_FUNC()`, :c:macro:`PyAPI_DATA()` and
|
The :c:macro:`!PyAPI_FUNC()`, :c:macro:`!PyAPI_DATA()` and
|
||||||
:c:macro:`PyMODINIT_FUNC` macros of :file:`Include/pyport.h` are defined
|
:c:macro:`PyMODINIT_FUNC` macros of :file:`Include/exports.h` are defined
|
||||||
differently depending if the ``Py_BUILD_CORE_MODULE`` macro is defined:
|
differently depending if the ``Py_BUILD_CORE_MODULE`` macro is defined:
|
||||||
|
|
||||||
* Use ``Py_EXPORTED_SYMBOL`` if the ``Py_BUILD_CORE_MODULE`` is defined
|
* Use ``Py_EXPORTED_SYMBOL`` if the ``Py_BUILD_CORE_MODULE`` is defined
|
||||||
|
|
|
@ -1889,7 +1889,7 @@ Changes to Python's build process and to the C API include:
|
||||||
* The :c:macro:`!DL_EXPORT` and :c:macro:`!DL_IMPORT` macros are now deprecated.
|
* The :c:macro:`!DL_EXPORT` and :c:macro:`!DL_IMPORT` macros are now deprecated.
|
||||||
Initialization functions for Python extension modules should now be declared
|
Initialization functions for Python extension modules should now be declared
|
||||||
using the new macro :c:macro:`PyMODINIT_FUNC`, while the Python core will
|
using the new macro :c:macro:`PyMODINIT_FUNC`, while the Python core will
|
||||||
generally use the :c:macro:`PyAPI_FUNC` and :c:macro:`PyAPI_DATA` macros.
|
generally use the :c:macro:`!PyAPI_FUNC` and :c:macro:`!PyAPI_DATA` macros.
|
||||||
|
|
||||||
* The interpreter can be compiled without any docstrings for the built-in
|
* The interpreter can be compiled without any docstrings for the built-in
|
||||||
functions and modules by supplying :option:`!--without-doc-strings` to the
|
functions and modules by supplying :option:`!--without-doc-strings` to the
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue