The public keyword
This is a very powerful keyword in Cython. It allows any cdef
declaration with the public
modifier to output a respective C/C++ header with the relative declaration accessible from C/C++. For example, we can declare:
cdef public struct CythonStruct: size_t number_of_elements; char ** elements;
Once the compiler handles this, you will have an output of cython_input.h
:
struct CythonStruct { size_t number_of_elements; char ** elements; };
The main caveat, if you're going to call the Python public
declarations directly from C, is that, if your link model is fully embedded and linked against libpython.so
, you need to use some boilerplate code to initialize Python correctly:
#include <Python.h> int main(int argc, char **argv) { Py_Initialize (); // code in here Py_Finalize (); return 0; }
And before calling anything with the function, you need to initialize the Python module example if you have a cythonfile.pyx
file, and compile it with...