簡體   English   中英

如何在Cython中使用#define作為char數組的大小

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM