我正在尝试用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

非常感谢您的帮助!

最佳答案

从我目前所读到的来看,cdef并不等同于atypedef。而是声明C变量。尝试使用ctypedef代替链接中的描述。
编辑:再解释一下。
当您使用cdef mystruct* my_val时,您没有执行typedef,而是声明C变量my_val,该变量的类型为mystruct *。当您现在尝试像在类中那样将它用作类型说明符时,它当然会告诉您它不是一个说明符,因为它是一个变量。如果您使用ctypedef来代替它,它将执行typedef

ctypedef mystruct *my_val

对于第二个cdef struct mystruct* my_val它抛出语法错误,因为语法是cdef类型名,因此您尝试初始化一个名为mystruct*struct类型变量,并在其后面有一个尾随的my_val表达式。

关于python - 如何在Cython中使用指针声明链接列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53560635/

10-11 10:26