Martin v. Löwis <mar...@v.loewis.de> added the comment: > Hmm. I see this usage in a lot of places---e.g. see > unicode_capitalize, unicode_casefold, unicode_title etc. in > Objects/unicodeobject.c. So it looks like we're relying on the > (PyCFunction) cast to convert from a one-argument function pointer to > a two-argument function pointer, which sounds a bit worrisome---I > guess it just happens to work with common ABI calling conventions. > I'm a bit surprised that we're not seeing compiler warnings about > this sort of thing.
The compiler has no chance to find out. You cast the pointer to PyCFunction, telling the compiler that it really is a PyCFunction. I really wish we could put a ban on function pointer casts, and try to make this all statically type-correct. This, of course, would require the sizeof function to take PyObject*, and cast it to PyStructObject * locally. My idiom for that is static PyObject * s_sizeof(PyStructObject *_self, PyObject *unused) { PyStructObject *self = (PyStructObject *)_self; > It sounds like 'wrong everywhere' is accurate, unfortunately. "Everywhere" is nowhere close to the truth. There are tons of NOARGS functions which have the correct signature. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue15402> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com