代码之家  ›  专栏  ›  技术社区  ›  aaronasterling

带Cython的条件“ctypedef”

  •  7
  • aaronasterling  · 技术社区  · 14 年前

    我需要进入 uint64_t stdint.h 在我正在编写的一些包装器代码中,我不知道如何完成它。问题是,从我从医生那里可以看出,我的 ctypedef

    ctypedef unsigned long uint64_t
    

    ctypedef unsigned long long uint64_t
    

    取决于 WORDSIZE bits/wordsize.h ctypedef类型 中的语句 if 如果 a中的声明 cdef 块,似乎把它和声明混淆了。有什么想法吗?希望我错过了一些基本的东西。

    2 回复  |  直到 14 年前
        1
  •  10
  •   Mu Mind hora    13 年前
    cdef extern from "stdint.h":
        ctypedef unsigned long long uint64_t
    

    任何 ctypedef 那是 extern 'd将不会在.c文件中生成typedef。Cython将包括 stdint.h 您的C编译器将从那里使用实际的typedef。

    提供的类型唯一重要的是cython何时生成在C类型和Python类型之间自动转换的代码。使用 unsigned long long PyLong_FromUnsignedLongLong PyLong_AsLongLongAndOverflow

        2
  •  10
  •   0 _ Edward Ned Harvey    9 年前

    Cython在模块中包含这些定义 libc.stdint

    from libc cimport stdint
    
    ctypedef stdint.uint64_t foo