C 打印pid的正确printf说明符是什么

C 打印pid的正确printf说明符是什么,c,io,printf,pid,C,Io,Printf,Pid,我目前正在使用显式转换为long,并使用%ld打印pid\u t,是否有%z这样的说明符用于size\u t打印pid\u t 如果不是,打印的最佳方式是什么?没有这样的说明符。我认为您正在做的(将pid\u t转换为long,并使用%ld”打印)很好;您可以使用更宽的int类型,但对于pid\u t大于long且可能永远不会大于long的情况,没有任何实现。整数类型缺少匹配的格式说明符,就像pid\u t的情况一样,但对于已知的正负号1,转换为最宽的匹配有符号类型并打印 如果其他系统类型的符号

我目前正在使用显式转换为long,并使用
%ld
打印
pid\u t
,是否有
%z
这样的说明符用于
size\u t
打印
pid\u t


如果不是,打印的最佳方式是什么?

没有这样的说明符。我认为您正在做的(将
pid\u t
转换为
long
,并使用
%ld”
打印)很好;您可以使用更宽的int类型,但对于
pid\u t
大于
long
且可能永远不会大于
long的情况,没有任何实现。

整数类型缺少匹配的格式说明符,就像
pid\u t
的情况一样,但对于已知的正负号1,转换为最宽的匹配有符号类型并打印

如果其他系统类型的符号度未知,则强制转换为最宽的无符号类型或


一,
pid\u t
数据类型是一种能够表示进程ID的类型。

Nice。如果您想使用自己的
pid\t
规范定制
printf
,请查看此页面:进程总数是否与操作系统的位相关?e、 一个操作系统可以有更大的尺寸吗。。。pid_t通常为32位,与OS位大小无关。一个系统可以有更大的,但我没想到。在任何情况下,long对于安全来说都是足够的。嗯,如果是真的,那么在
long
为64位的实现中,使用
%ld”
打印肯定会引起问题。@chux请阅读问题:“我目前正在使用显式转换为long并使用%ld”-这就是我所说的“很好”。当然,使用%ld时,如果不保证传递long,则会出现问题。我得到了%d hello.c:9:42:警告:format指定类型“long”,但在我尝试时参数的类型为“pid_t”(也称为“int”)[-Wformat]ld@KorayTugay注意上面的话:“我目前正在使用显式转换为long”。“如果符号的大小未知,请转换为最宽的无符号类型”——我不建议这样做。转换到
uintmax\u t
并使用
%ju
打印将不正确地打印所有负值,而转换到
intmax\u t
并使用
%jd
打印只会不正确地打印值。(再说一次,真正不知道类型是否包含负值的情况非常罕见。)@JimBalter Fair point。在符号未知的情况下,存在错误地将负值打印为大值或将大值打印为负值的权衡。我希望在符号未知的情况下,使用
intmax\t
通常更为自然,因为小值更为常见,但将有符号整数转换为
uintmax\t
的定义更为狭窄,与无符号整数转换为
intmax\t
相比,不会丢失信息(因此我更喜欢)。
pid_t pid = foo();

// C99
#include <stdint.h>
printf("pid = %jd\n", (intmax_t) pid);
// C99
#include <stdint.h>
#include <inttypes.h>
printf("pid = %" PRIdMAX "\n", (intmax_t) pid);
// pre-C99
pid_t pid = foo();
printf("pid = %ld\n", (long) pid);