我有一个相对复杂的 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 友指点!谢谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.