Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

С целочисленными типами, не имеющими соответствующего спецификатора формата, как в случае pid_t, но с известным знаком 1, приведите к самому широкому совпадению со знаком типа и напечатайте. Если знак не известен, приведите к самому широкому типу без знака.

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);

1 Тип данных pid_t представляет собой целочисленный тип со знаком, который может представлять идентификатор процесса.