![](/img/trans.png)
[英]Cython to interface between python and c-library with unknown size char array
[英]How to use #define as size of char array in Cython
c ++頭文件(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]
並得到一個錯誤:不允許在常量表達式中
您在聲明類型時告訴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
(我目前沒有關於在這種情況下該怎么做的建議)
NAME_SIZE
實際上並不存在於您的程序中,因此您可能必須在Python中對其進行硬編碼。
盡管它在C源代碼中看起來像,但您也將其硬編碼在C數組聲明中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.