在Cython中,可以通过从stdint
导入来使用精确宽度的整数类型,例如:
from libc.stdint cimport int32_t
查看stdint.pxd,我们可以看到int32_t
定义为
cdef extern from "<stdint.h>" nogil:
...
ctypedef signed int int32_t
这是否意味着,如果我在Cython代码中使用int32_t
,则此类型只是signed int
(int
)的别名,而实际上可能只有16位宽?
对于所有其他整型,问题都是相同的。
2条答案
按热度按时间dw1jzc5e1#
他们应该没事。
实际使用的typedef来自C stdint. h头文件,几乎可以肯定它们是正确的。
Cython类型定义
实际上只是为了让Cython理解该类型是一个整数,并且它是有符号的。它并不是生成的C代码中实际使用的类型。因为它在一个
cdef extern
块中,所以它告诉Cython“存在这样的typedef”,而不是作为真正的定义。2vuwiymt2#
编号
在
signed int
不是32位宽的平台上,int32_t
将被typedef
'艾德为实际 * 是 * 32位宽的类型。如果没有这样的类型可用--例如,在最大int宽度为16的平台上,或者所有int都是64位的平台上,或者
CHAR_BIT
不等于8的平台上--则不会定义精确宽度类型。(是的,精确宽度类型是 * 可选的 *。这就是为什么还有最小宽度类型的原因。)免责声明:这是从一个纯粹的C语言的Angular 讲的。我对Cython没有任何经验。但是如果这在Cython中没有被充分地覆盖,那将是非常令人惊讶的(和一个bug)。
正如@JörgWMittag在他的评论中指出的那样,另一种选择当然是简单地不支持
signed int
不是32位宽的任何平台。