我需要uint64_t从stdint.h我正在编写的一些包装代码中访问typedef ,我无法弄清楚如何完成它.问题是,从我从文档中可以看出,我ctypedef必须采取以下形式:
ctypedef unsigned long uint64_t
Run Code Online (Sandbox Code Playgroud)
要么
ctypedef unsigned long long uint64_t
Run Code Online (Sandbox Code Playgroud)
取决于是WORDSIZE从bits/wordsize.h64还是32.我无法找到如何从Cython访问这个预处理器定义,如果可以的话,Cython似乎不喜欢ctypedef语句中的if语句,当我尝试放置时if在一个cdef块中的声明,它似乎与声明混淆.有任何想法吗?希望我在这里错过了一些非常基本的东西.
hab*_*bit 10
cdef extern from "stdint.h":
ctypedef unsigned long long uint64_t
Run Code Online (Sandbox Code Playgroud)
任何ctypedef多数民众赞成extern"d不会有.c文件生成一个typedef.Cython将包括stdint.h,你的C编译器将使用实际的typedef.
该类型提供的唯一问题是当cython生成自动在C类型和Python类型之间转换的代码时.使用unsigned long longCython将使用的手段PyLong_FromUnsignedLongLong和PyLong_AsLongLongAndOverflow.这样,您希望不会在转换时获得任何截断.
Cython libc.stdint已在模块中包含这些定义:
from libc cimport stdint
ctypedef stdint.uint64_t foo
Run Code Online (Sandbox Code Playgroud)