web-dev-qa-db-ja.com

pid_tを印刷するための正しいprintf指定子は何ですか

現在、明示的なlongへのキャストを使用しており、%ldを使用してpid_tを使用していますが、%z for size_t for pid_tなどの指定子はありますか?

そうでない場合、pid_tを印刷する最良の方法は何ですか?

38

そのような指定子はありません。私はあなたがやっていることは素晴らしいと思う...あなたはさらに広いint型を使用することができますが、pid_tlongより大きく、おそらくそうなることはありません。

15
Jim Balter

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