gpt4 book ai didi

python - 有条件的 `ctypedef` 与 Cython

转载 作者:太空狗 更新时间:2023-10-29 21:21:31 27 4
gpt4 key购买 nike

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

ctypedef unsigned long uint64_t

ctypedef unsigned long long uint64_t

取决于 bits/wordsize.h 中的 WORDSIZE 是 64 还是 32。我一直没能找到如何访问这个预处理器定义来自 Cython,如果可以的话,Cython 似乎不喜欢 if 语句中的 ctypedef 语句,当我尝试将 if 语句放入cdef block ,它似乎将它与声明混淆了。有任何想法吗?希望我只是在这里遗漏了一些非常基本的东西。

最佳答案

cdef extern from "stdint.h":
ctypedef unsigned long long uint64_t

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

提供的类型唯一重要的是当 cython 生成自动在 C 类型和 Python 类型之间转换的代码时。使用 unsigned long long 意味着 Cython 将使用 PyLong_FromUnsignedLongLongPyLong_AsLongLongAndOverflow。这样,您有望不会在转换时出现任何截断。

关于python - 有条件的 `ctypedef` 与 Cython,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3544240/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com