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