What is the correct printf specifier for printing pid_t

CIoPrintfPid

C Problem Overview


I'm currently using a explicit cast to long and using %ld for printing pid_t, is there a specifier such as %z for size_t for pid_t?

If not what the best way of printing pid_t?

C Solutions


Solution 1 - C

There's no such specifier. I think what you're doing (casting the pid_t to long and printing it with "%ld") is fine; you could use an even wider int type, but there's no implementation where pid_t is bigger than long and probably never will be.

Solution 2 - C

With integer types lacking a matching format specifier as in the case of pid_t, yet with known sign-ness1, cast to widest matching signed type and print.

If sign-ness is not known for other system type, cast to the widest unsigned type or alternate opinion

pid_t pid = foo();

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

Or

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

Or

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

1 The pid_t data type is a signed integer type which is capable of representing a process ID.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBilal Syed HussainView Question on Stackoverflow
Solution 1 - CJim BalterView Answer on Stackoverflow
Solution 2 - Cchux - Reinstate MonicaView Answer on Stackoverflow