C ++ / C int32_t和printf格式:%d或%ld?

时间:2016-10-19 03:45:39

标签: c++ c printf

在某些平台中,int32_t(来自stdint.h)是long int,但在其他平台中,它可能是int。当我想使用printf时,如何确定应使用哪种格式"%ld""%d"

或者,或许,我应该强制将其转换为如下所示:

int32_t m;
m = 3;
printf ("%ld\n", (long)m);

但这种解决方案很乏味。有什么建议吗?

1 个答案:

答案 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 ++标准指定不需要。