Is "#define snprintf(...)" syntax supported by C99? Since Python 3.6
This is a C preprocessor feature, not C++, so I would be surprised that it is not supported.
Let's be simpler: what not put those definitions in a private header? ... Python should use PyOS_snprintf instead where possible.
I agree. My proposed fix was just in case people relied on this macro (by calling it), to be backward compatible.
This fix would still break people who used the macro to refer to a function pointer though - but I find this incredibly unlikely.
S.
On Thu, Apr 9, 2020 at 8:06 PM Petr Viktorin <encukou@gmail.com> wrote:
On 2020-04-09 12:23, Sylvain Corlay wrote:
Hi All,
I hope I am not breaking any rules by posting here. I maintain a number of libraries and C++ Python extensions and one slightly annoying thing about the Python.h headers is that it includes headers defining macros such as *snprintf*.
In C++, this collides with std::snprintf defined in the <cstdio>. One backward-compatible way to make these collision less likely would be to make this macro a function-style macro - so that we could prevent the macro expansion in client code by simply adding parentheses to the calls to the actual functions.
(std::snprintf)(foobar)
In my opinion, it would make the world a better place for C++ Python extension authors :)
This is already reported: https://bugs.python.org/issue36020
Python should use PyOS_snprintf instead where possible.
(Unfortunately I don't currently have time to work on this.)
capi-sig mailing list -- capi-sig@python.org To unsubscribe send an email to capi-sig-leave@python.org