打印pid_t的printf说明符是什么

Bil*_*ain 39 c io printf pid

我目前使用一个显式的长和使用%ld打印pid_t,有一个符如%z用于size_tpid_t

如果没有什么最好的印刷方式pid_t

Jim*_*ter 16

没有这样的说明者.我认为你正在做的事情很好......你可以使用更宽泛的int类型,但是没有实现哪个pid_t更大,long也可能永远不会.

  • 嗯,如果 [pid_t 通常是 32 位,无论操作系统位大小如何。](/sf/ask/1437352451/ Correct-printf-specifier-for-printing-pid-t /44504623#comment30706088_20533635) 是正确的,那么在 `long` 是 64 位的实现中,使用 `"%ld"` 打印肯定会导致问题。 (2认同)
  • @chux-ReinstateMonica 请阅读问题:“***我目前正在使用显式转换为 long*** 并使用 %ld”——这就是我所说的“很好”。当然,使用 %ld 不能保证传递的是 long 值,这是有问题的。 (2认同)

chu*_*ica 9

对于缺少匹配格式说明符的整数类型,如同pid_t已知符号的情况,转换为最宽匹配的签名类型和打印.如果sign-ness未知,则转换为最宽的无符号类型.

pid_t pid = foo();

// C99
#include <stdint.h>
printf("pid = %jd\n", (intmax_t) pid);
Run Code Online (Sandbox Code Playgroud)

要么

// C99
#include <stdint.h>
#include <inttypes.h>
printf("pid = %" PRIdMAX "\n", (intmax_t) pid);
Run Code Online (Sandbox Code Playgroud)

要么

// pre-C99
pid_t pid = foo();
printf("pid = %ld\n", (long) pid);
Run Code Online (Sandbox Code Playgroud)