web-dev-qa-db-fra.com

Quel est le bon spécificateur printf pour imprimer pid_t

J'utilise actuellement une distribution explicite trop longue et j'utilise %ld pour l'impression pid_t, existe-t-il un spécificateur tel que %z pour size_t pour pid_t?

Sinon, quelle est la meilleure façon d'imprimer pid_t?

38
Bilal Syed Hussain

Il n'y a pas un tel spécificateur. Je pense que ce que vous faites est très bien… vous pouvez utiliser un type int encore plus large, mais il n'y a pas d'implémentation où pid_t est plus grand que long et ne le sera probablement jamais.

15
Jim Balter

Avec les types entiers sans spécificateur de format correspondant comme dans le cas de pid_t, mais avec une signature connue, transtypée en caractères signés et en caractères d'imprimerie correspondants les plus larges. Si la signature n'est pas connue, transtypez le type non signé le plus large.

pid_t pid = foo();

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

Ou

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

Ou

// pre-C99
pid_t pid = foo();
printf("pid = %ld\n", (long) pid);
9
chux