首页 > 解决方案 > 我如何知道要为“%zi” printf 说明符传递哪种类型?

问题描述

在 C99 中,可能的格式说明符之一是“%zi”,根据 cppreference,它应该对应于“signed size_t”。在 Linux 系统上,我使用ssize_tfromsys/types.h并且有效。但是 - 在 Windows 上,我们没有。另外 - 它对我有用的事实可能只是侥幸。

如何确定并以可移植的方式确定我应该在printf()/sprintf()调用中为“%zi”传递的类型?

标签: cprintflanguage-lawyersize-tssize-t

解决方案


如何确定并以可移植的方式确定我应该在printf()/sprintf()调用中为“%zi”传递的类型?

你不能以某种可移植的方式做到这一点。

C 标准承认有符号整数类型的可能存在1对应于size_t但不给它一个名称或提供识别它的可移植方法。像许多事情一样,这作为扩展保留在某些 C 实现中而不是其他实现中。

脚注

1 C 2018 6.2.5 6 要求,对于每个有符号整数类型,都有一个对应的无符号整数类型,但不需要反过来。(至少没有明确表示;例如,我没有检查通常的算术转换是否暗示它。)


推荐阅读