下面是一个简单的C程序square.c
,它是复杂程序的简化:
#include <stdio.h>
#include <stdlib.h>
struct Square {
float length;
float width;
};
typedef struct Square *sq;
float calc_area(sq a) {
float s;
s = a->length * a->width;
return s;
}
int main() {
sq a;
a = malloc(sizeof(struct Square));
a->length = 10.0;
a->width = 3.0;
printf("%f\n", calc_area(a));
free(a);
}
我想包装calc_area()
函数并在Python中调用它。我对C
和Cython
不太熟悉,但似乎难点是calc_area()
的参数是一个指针结构。
我尝试使用Cython,下面是我的努力:
首先,我写了一个头文件square.h
:
#include <stdio.h>
#include <stdlib.h>
struct Square {
float length;
float width;
};
typedef struct Square *sq;
float calc_area(sq a);
其次,我写了square_wrapper.pyx
如下
cdef extern from 'square.h':
struct Square:
float length
float width
ctypedef struct Square *sq
float calc_area(sq a)
def c_area(a):
return calc_area(sq a)
似乎ctypedef struct Square *sq
不正确,但我不知道如何修改它 - 这是我第一次尝试包装一个C程序而且我找不到类似的例子。
我如何使用Cython或任何其他工具解决这个问题?提前谢谢!