Commit 7403c15b authored by Stefan Behnel's avatar Stefan Behnel

update "external C code" docs

--HG--
extra : transplant_source : c%B9V%7B%E3%DE%9AJ%B78%A0%03I%D8%8D%EBbF%1E%BE
parent c06c9092
......@@ -224,11 +224,11 @@ and provide the Python user with Python functions of the same names.
Cython provides a couple of different ways of solving this problem. The best
way, especially if you have many C functions to wrap, is to put the extern
C function declarations into a ``.pxd`` file and thus a different namespace,
using the facilities described in the section on sharing declarations between
Cython modules. Writing them into a ``.pxd`` file allows their reuse across
modules, avoids naming collisions in the normal Python way and even makes it
easy to rename them on cimport. For example, if your ``decl.pxd`` file
declared a C function ``eject_tomato``::
using the facilities described in :ref:`sharing declarations between Cython
modules <sharing-declarations>`. Writing them into a ``.pxd`` file allows
their reuse across modules, avoids naming collisions in the normal Python way
and even makes it easy to rename them on cimport. For example, if your
``decl.pxd`` file declared a C function ``eject_tomato``::
cdef extern from "myheader.h":
void eject_tomato(float speed)
......@@ -247,6 +247,9 @@ or simply cimport the ``.pxd`` file and use it as prefix::
def eject_tomato(speed):
decl.eject_tomato(speed)
Note that this has no runtime lookup overhead, as it would in Python.
Cython resolves the names in the ``.pxd`` file at compile time.
For special cases where namespacing or renaming on import is not enough,
e.g. when a name in C conflicts with a Python keyword, you can use a C name
specification to give different Cython and C names to the C function at
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment