我在Cython中有这个:
cdef extern from "lib/bindings.h":
ctypedef struct parser:
yyscan_t yyscanner
...
相关的C代码:
typedef struct {
yyscan_t yyscanner;
...
} _parser, *parser;
现在,当我尝试:
cdef parser p = ...
if p != NULL:
...
得到:
Invalid types for '!=' (parser, void *)
为什么呢? Cython是否误解了parser
声明?似乎它并没有理解&#34; <{1}}是指针类型。
答案 0 :(得分:2)
Cython根本没有读取你的C代码 - 只是盲目地#include
相关文件并使用你的Cython ctypedef
来了解正在发生的事情。由于您没有在Cython代码中显示指针,因此无法知道parser
是指针类型。
正确的声明就像是
cdef extern from "lib/bindings.h":
ctypedef struct _parser:
yyscan_t yyscanner
# ...
ctypedef _parser* parser