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

标签 c++ c printf

<分区>

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

或者,也许,我应该像下面这样强制将其转换为 long:

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

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

最佳答案

在 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++ 标准指定这不是必需的。

关于C++/C int32_t 和 printf 格式 : %d or %ld?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40121748/

相关文章:

c - 如何在一行中读取C中的多个scanf输入?说 200 默克 58.9?

无法通过双击运行 SDL2 可执行文件

C 使用 fscanf 和 printf 返回奇怪的值?

c - 为什么 printf 只打印字符串中的第一个单词?

c++ - 如何动态更改 CMFCRibbonLabel 的文本

c++ - 我怎样才能让这个函数输出最大数组值?

c - -DNDEBUG 会干扰 -g 标志吗?

c - 在C中搜索多个单词,并在它们后面显示以逗号分隔的信息

c++ - Ifstream 从文本文件中读取错误的字符

c++ - 我不明白内存分配和strcpy