c - 我如何知道要为“%zi” printf 说明符传递哪种类型?
问题描述
在 C99 中,可能的格式说明符之一是“%zi”,根据 cppreference,它应该对应于“signed size_t
”。在 Linux 系统上,我使用ssize_t
fromsys/types.h
并且有效。但是 - 在 Windows 上,我们没有。另外 - 它对我有用的事实可能只是侥幸。
如何确定并以可移植的方式确定我应该在printf()
/sprintf()
调用中为“%zi”传递的类型?
解决方案
如何确定并以可移植的方式确定我应该在
printf()
/sprintf()
调用中为“%zi”传递的类型?
你不能以某种可移植的方式做到这一点。
C 标准承认有符号整数类型的可能存在1对应于size_t
但不给它一个名称或提供识别它的可移植方法。像许多事情一样,这作为扩展保留在某些 C 实现中而不是其他实现中。
脚注
1 C 2018 6.2.5 6 要求,对于每个有符号整数类型,都有一个对应的无符号整数类型,但不需要反过来。(至少没有明确表示;例如,我没有检查通常的算术转换是否暗示它。)
推荐阅读
- php - 使用 MySQL 查询更新 HTML 图形
- authentication - 如何使用 CQS 模式创建登录实现?
- html - 溢出方法在 html 页面中不起作用。
- javascript - 如何通过谷歌浏览器在 Javascript 中多次滚动到页面底部?
- javascript - 在 Express 中 next() 接受什么参数
- python - 在 Django 中,如何找到违反唯一一起约束的行?
- python - ImportError:没有名为请求的模块,但在路径中
- asp.net - ASP.Net MVC:将下拉列表绑定到模型上的列表
- java - JpaRepository 查找子项(可分页)
- java - 如何实现 hashCode 和 equals 方法从 ArrayList 中删除重复项