c ++ header(some.h)包含:
#define NAME_SIZE 42
struct s_X{
char name[NAME_SIZE + 1]
} X;
我想在Python中使用X结构。我怎么能做到?
我写道:
cdef extern from "some.h":
cdef int NAME_SIZE # 42
ctypedef struct X:
char name[NAME_SIZE + 1]
出现错误:不允许使用常量表达式
答案 0 :(得分:1)
在声明类型时你告诉Cython通常并不重要 - 它使用信息来检查你没有做任何明显错误的类型转换,就是这样。 cdef extern "some.h"
语句确保将some.h包含在Cython创建的c文件中,并最终确定所编写的内容。
因此,在这种特殊情况下,您只需插入一个仲裁编号即可正常使用
cdef extern "some.h":
cdef int NAME_SIZE # 42
ctypedef struct X:
char name[2] # you can pick a number at random here
在某些情况下它不会起作用,特别是在Cython必须实际使用它生成的C代码中的数字的情况下。例如:
def some_function():
cdef char_array[NAME_SIZE+1] # won't work! Cython needs to know NAME_SIZE to generate the C code...
# other code follows
(我目前没有关于在这种情况下该做什么的建议)
答案 1 :(得分:0)
NAME_SIZE
实际上并不存在于您的程序中,因此您可能需要在Python中对其进行硬编码。
尽管它在C源代码中看起来如此,但你也在C数组声明中对其进行了硬编码。