'signed size_t'与'ssize_t'不同吗? (Ubuntu 13.10)

时间:2013-12-23 13:15:06

标签: android java-native-interface

当我使用ndk-build进行编译时,它会显示一条错误消息:

  

警告:格式'%zd'需要'signed size_t'类型的参数,但是   参数5的类型为'ssize_t'。

我认为ssize_tsigned size_t相同,我错了吗?

2 个答案:

答案 0 :(得分:3)

ssize_tlong int,但size_tunsigned int。要打印或记录ssize_t,只需使用“%ld”

答案 1 :(得分:1)

select t.* from t order by row_number() over (partition by col3 order by random()), col1 的定义因系统而异。有时是ssize_t,有时是int。可能在某些系统上也将其定义为long

long long int应该是与ssize_t相同宽度的有符号整数,因此size_t在健全的系统配置中适用于%zd。但是要移植到像您这样的破损情况,您可以使用ssize_t并将参数转换为%ld

long int

不幸的是,即使看到的错误消息可能会使您相信可以,也无法像printf("%ld\n", (long)ssize);那样强制转换为signed size_t

所有这些,您确实应该找出导致此错误出现的工具链/ sysroot出了什么问题。您很有可能正在为另一个平台进行交叉编译,但是要使某些系统包含来自错误位置的文件。如果您只是通过更改printf("%zd\n", (signed size_t)ssize)来解决问题,那么以后您可能会遇到更糟糕,更奇怪的问题。