当我使用ndk-build进行编译时,它会显示一条错误消息:
警告:格式'%zd'需要'signed size_t'类型的参数,但是 参数5的类型为'ssize_t'。
我认为ssize_t
与signed size_t
相同,我错了吗?
答案 0 :(得分:3)
ssize_t
为long int
,但size_t
为unsigned 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)
来解决问题,那么以后您可能会遇到更糟糕,更奇怪的问题。