C语言 用于打印pid_t的正确printf说明符是什么

llmtgqce  于 2023-01-12  发布在  其他
关注(0)|答案(2)|浏览(255)

我目前使用显式转换为long,并使用%ld打印pid_t,是否存在%z代表size_t代表pid_t的说明符?
如果不是,打印pid_t的最佳方法是什么?

lvmkulzt

lvmkulzt1#

没有这样的说明符,我认为您所做的(将pid_t转换为long并使用"%ld"打印它)是很好的;你可以使用更宽的int类型,但是没有pid_tlong大的实现,而且可能永远不会。

yk9xbfzb

yk9xbfzb2#

对于缺少匹配格式说明符的整数类型(如pid_t),如果已知sign-ness 1,则强制转换为最匹配的有符号类型并打印。

pid_t pid = foo();

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

或者

// Since 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数据类型是能够表示进程ID的signed integer类型。

相关问题