Skip to content

Commit

Permalink
GH-92892: Add section about variadic functions to ctypes documentation (
Browse files Browse the repository at this point in the history
#99529)

On some platforms, and in particular macOS/arm64, the calling
convention for variadic arguments is different from the regular
calling convention. Add a section to the documentation to document
this.
  • Loading branch information
ronaldoussoren committed Nov 22, 2022
1 parent 959ba45 commit bc3a11d
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 0 deletions.
20 changes: 20 additions & 0 deletions Doc/library/ctypes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,26 @@ that they can be converted to the required C data type::
31
>>>

.. _ctypes-calling-variadic-functions:

Calling varadic functions
^^^^^^^^^^^^^^^^^^^^^^^^^

On a lot of platforms calling variadic functions through ctypes is exactly the same
as calling functions with a fixed number of parameters. On some platforms, and in
particular ARM64 for Apple Platforms, the calling convention for variadic functions
is different than that for regular functions.

On those platforms it is required to specify the *argtypes* attribute for the
regular, non-variadic, function arguments:

.. code-block:: python3
libc.printf.argtypes = [ctypes.c_char_p]
Because specifying the attribute does inhibit portability it is adviced to always
specify ``argtypes`` for all variadic functions.


.. _ctypes-calling-functions-with-own-custom-data-types:

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Document that calling variadic functions with ctypes requires special care on macOS/arm64 (and possibly other platforms).

0 comments on commit bc3a11d

Please sign in to comment.