我目前使用显式转换为long,并使用%ld打印pid_t,是否存在%z代表size_t代表pid_t的说明符?如果不是,打印pid_t的最佳方法是什么?
%ld
pid_t
%z
size_t
lvmkulzt1#
没有这样的说明符,我认为您所做的(将pid_t转换为long并使用"%ld"打印它)是很好的;你可以使用更宽的int类型,但是没有pid_t比long大的实现,而且可能永远不会。
long
"%ld"
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类型。
2条答案
按热度按时间lvmkulzt1#
没有这样的说明符,我认为您所做的(将
pid_t
转换为long
并使用"%ld"
打印它)是很好的;你可以使用更宽的int类型,但是没有pid_t
比long
大的实现,而且可能永远不会。yk9xbfzb2#
对于缺少匹配格式说明符的整数类型(如
pid_t
),如果已知sign-ness 1,则强制转换为最匹配的有符号类型并打印。或者
或者
如果其他系统类型的正负号未知,则强制转换为最宽的无正负号类型或替代意见
1
pid_t
数据类型是能够表示进程ID的signed integer类型。