我有一个相对复杂的 C 程序想用 Cython 将其中的某几个函数封装了给 Python 调用,由于太复杂想写个结构类似但简单的小程序试着用 Cython 封装,代码area.c如下:
#include <stdio.h>
#include <string.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->length = 10.0;
a->width = 3.0;
printf("%f\n", calc_area(a));
}
问题一:
gcc area.c -o area.exe 能够编译成功,但运行时在 mac 上提示 bus error ,在 linux 上提示段错误。有朋友告诉我把sq a;改成sq a=new Square();然后用 g++编译,确实能够成功,但这样就和原来复杂的程序产生了结构性变化。原复杂程序里面的定义和我这个简单程序是一样的,但能够成功运行,不知道为什么这个简单程序就出错了。
问题二:
如果这个简单的程序能够运行,如何将calc_area()这个函数用 Cython 封装呢?主要的难点是,这里 sq 是个结构体指针, Cython 貌似并没有能力自动处理这种非常规类型的接口。
求各位 V 友指点!谢谢