我试图在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
非常感谢您的帮助!
答案 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
表达式。