использование типов C, объявленных в файле .h

#c #cython #typedef #python-2.x

#c #cython #typedef #python-2.x

Вопрос:

Я хочу использовать в своих .pyx типах C, которые typedef объявлены в моем файле .h:

 //decls.h
typedef double Doub
typedef long int LInt
//etc...
 

Моя простая работа заключалась в том, чтобы повторно объявить их в моем *.pxd (т. Е. Скопировать-вставить этот мой блок .h в мою .pxd замену typedef -> ctypedef ).
Теперь я использую другой .h с большим количеством typedef операторов, поэтому мне хотелось бы более «китонический» способ объявления.
Я читал это, но мне это не помогло.
Может быть, что-то вроде?:

 # .pxd cython file
cdef extern from "decls.h":
    Doub # no idea what to put before `Doub`
 

Ответ №1:

Если единственным отличием является c in typedef , вы можете использовать препроцессор C для предварительной .h обработки файла в файл, который может обрабатываться cython. Например:

 // a .c file:
#define CTYPEDEF typedef
#include "mytypes.h"

// the "mytypes.h" for cython preprocessing
#ifndef CTYPEDEF
# define CTYPEDEF ctypedef
#endif
CTYPEDEF ... myType;
 

В вашем makefile или IDE создайте правило для предварительной обработки файла .h, а затем включите выходные данные в cython.

Если есть больше различий, вы можете выполнить обработку таким же образом и посмотреть это в качестве примера.

Комментарии:

1. приятно, но все же мне было интересно, есть ли какое-то решение, например from "file.h" cimport ctype1, ctype2, ... , или какое-то cdef extern ...