在某些平台中,int32_t
(来自stdint.h)是long int
,但在其他平台中,它可能是int
。当我想使用printf
时,如何确定应使用哪种格式"%ld"
或"%d"
?
或者,或许,我应该强制将其转换为如下所示:
int32_t m;
m = 3;
printf ("%ld\n", (long)m);
但这种解决方案很乏味。有什么建议吗?
答案 0 :(得分:10)
在C(自C99起)中,inttypes.h
包含扩展为固定宽度类型的格式说明符的宏。对于int32_t
:
printf("%" PRId32 "\n", m);
该宏可能会扩展为"d"
或"ld"
。您可以使用常用的修饰符等,例如:
printf("%03" PRId32 "\n", m);
在C ++中(自C ++ 11开始)#include <inttypes.h>
或#include <cinttypes>
可以使用相同的工具。
显然,某些C ++实现要求用户在#define __STDC_FORMAT_MACROS 1
之前编写#include <inttypes.h>
,即使C ++标准指定不需要。