As a data point, I don't remember that recent versions of CPython brought any particular pain for PyArrow, which is a set of bindings written in Cython around some C++ core library code. Regards Antoine. On Wed, 27 Apr 2022 18:31:13 +0200 Victor Stinner <vstinner@python.org> wrote:
Hi,
If you got issues with using the Python C API <Python.h> in C++, please speak up! I'm looking for feedback :-)
Extending Python by writing C++ code is now easy with the pybind11 project: https://pybind11.readthedocs.io/
It seems like over the last years, building C++ extensions with the Python C API started to emit more C++ compiler warnings. One explanation may be that converting macros to static inline functions (PEP 670) introduce new warnings, even if the old and the new code is exactly the same. I just discover this issue recently. C and C++ compilers treat static inline functions differently. Macros are treated at legacy code which cannot be fixed, like system headers or old C header files, and so many warnings are made quiet. Static inline functions (defined in header files) are treated as regular code and compilers are more eager to emit warnings.
I just modified the Python C API to use C++ static_cast<type>(expr) and reinterpret_cast<type>(expr) if it's used with C++. In C, the regular (type)expr cast (called "old-style cast" by C++ compilers ;-)) is still used as before.
I'm also working on adding an unit test to make suite that using the Python C API works with a C++ compiler and doesn't emit compiler warnings:
* https://github.com/python/cpython/issues/91321 * https://github.com/python/cpython/pull/32175
In terms of C++ version, it was proposed to target C++11.
In the pythoncapi-compat project, I got warnings when the NULL constant is used in static inline functions. I modified the pythoncapi_compat.h header file to use nullptr if used with C++ to fix these compiler warnings. So far, I'm unable to reproduce the issue with <Python.h>, and so I didn't try to address this issue in Python.
Victor