9

私が書いているいくつかのラッパーコードuint64_tからtypedefにアクセスする必要があり、それを実行する方法がわかりません。stdint.h問題は、私がドキュメントからわかることから、私ctypedefは次の形式をとらなければならないということです。

ctypedef unsigned long uint64_t

また

ctypedef unsigned long long uint64_t

WORDSIZEfromが64か32かによって異なりbits/wordsize.hます。Cythonからこのプリプロセッサ定義にアクセスする方法を見つけることができませんでした。できれば、Cythonはctypedefステートメント内のifステートメントを好まないようです。ブロック内のifステートメントはcdef、宣言と混同しているようです。何か案は?うまくいけば、私はここで本当に基本的なものが欠けているだけです。

4

2 に答える 2

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

ctypedef'dであるものは、 .cexternファイルで生成されたtypedefを持ちません。Cythonが含まstdint.hれ、Cコンパイラはそこから実際のtypedefを使用します。

提供されるタイプが重要なのは、cythonがCタイプとPythonタイプの間で自動的に変換するコードを生成する場合だけです。使用とunsigned long longは、Cythonがとを使用することを意味します。このようにして、変換時に切り捨てが発生しないことを願っています。PyLong_FromUnsignedLongLongPyLong_AsLongLongAndOverflow

于 2010-08-23T02:47:02.517 に答える
10

Cythonには、これらの定義がlibc.stdintすでにモジュールに含まれています。

from libc cimport stdint

ctypedef stdint.uint64_t foo
于 2016-02-16T04:12:26.923 に答える