Каков правильный спецификатор printf для печати pid t

в настоящее время я использую явное приведение к long и using %ld для печати pid_t, есть ли спецификатор, такие как %z на size_t на pid_t?

если не то, что лучший способ печати pid_t?

2 ответов


такого спецификатора нет. Я думаю, то, что ты делаешь, прекрасно ... вы можете использовать еще более широкий тип int, но нет реализации, где pid_t больше long и, вероятно, никогда не будет.


с целочисленными типами, не имеющими соответствующего спецификатора формата, как в случае pid_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);