带Cython的条件“ctypedef”

2024-10-01 11:32:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从stdint.h访问uint64_ttypedef,这是我正在编写的一些包装代码,我不知道如何完成它。问题是,从文档中我可以看出,我的ctypedef必须采用以下形式:

ctypedef unsigned long uint64_t

或者

^{pr2}$

取决于WORDSIZE是64还是32。我还没有找到如何从Cython获得对这个预处理器定义的访问权,如果可以的话,Cython似乎不喜欢ctypedef语句在if语句中,当我试图将if语句放入cdef块中时,它似乎将其与声明混淆。有什么想法吗?希望我只是错过了一些非常基本的东西。在


Tags: 代码文档if语句处理器cython形式long
2条回答
cdef extern from "stdint.h":
    ctypedef unsigned long long uint64_t

任何ctypedef都不会在.c文件中生成typedef。Cython将包括stdint.h,而您的C编译器将使用从那里得到的实际typedef。在

该类型提供的唯一重要的事情是cython何时生成在C类型和Python类型之间自动转换的代码。使用unsigned long long意味着Cython将使用PyLong_FromUnsignedLongLong和{}。这样,您希望在转换时不会被截断。在

Cython已经在模块^{}中包含了这些定义:

from libc cimport stdint

ctypedef stdint.uint64_t foo

相关问题 更多 >