如何在Cython中使用指针声明链接列表

时间:2018-11-30 15:42:36

标签: python c pointers linked-list cython

我试图在Cython中为以下C代码创建一个链接列表:

typedef struct my_struct *my_val;

typedef struct my_struct {
      int i;
      my_val next_val;
}

这不起作用:

 cdef my_struct* my_val

 cdef struct bc_struct:
      int i
      my_val next_val

我在第一个cdef上遇到此错误:

'my_val' is not a type identifier

这也没有:

cdef struct my_struct* my_val

这在第一个cdef上给出了错误:

Syntax error in struct or union definition

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

根据我到目前为止所读的内容,cdef并不等同于typedef。相反,您是在声明C变量。尝试使用ctypedef代替链接中所述。

编辑:更多解释。 当您使用cdef mystruct* my_val时,您并没有执行typedef,而是声明了C类型的my_val变量mystruct *。现在,当您尝试像在类中那样将其用作类型说明符时,它当然会告诉您它不是说明符,因为它是变量。如果您使用ctypedef而是执行typedef

ctypedef mystruct *my_val

第二个cdef struct mystruct* my_val会引发语法错误,因为语法是cdef type name ,因此您尝试初始化一个名为mystruct*类型为struct的{​​{1}},后面还有一个结尾的my_val表达式。