C 打印在不同平台上更改的类型

C 打印在不同平台上更改的类型,c,int,long-integer,format-specifiers,C,Int,Long Integer,Format Specifiers,我需要存储一个项目数组,其中每个项目的长度为32位。因此,目前我使用的是long数组。但是我现在在另一台机器上编译,long是64位的。当涉及到有符号的数字时,这会产生问题。(即,在两台机器上打印相同的数字,一台为负数(32位),另一台为正数(64位) 因此,计划是切换到int32\u t,问题是当使用格式字符串打印数字时,说明符需要不同,因为在32位机器上int32\u t被定义为long,而在64位机器上定义为int 要确保在任何机器上编译的数据都是32位的,并且数字可以打印出来,最好的方法

我需要存储一个项目数组,其中每个项目的长度为32位。因此,目前我使用的是
long
数组。但是我现在在另一台机器上编译,
long
是64位的。当涉及到有符号的数字时,这会产生问题。(即,在两台机器上打印相同的数字,一台为负数(32位),另一台为正数(64位)

因此,计划是切换到
int32\u t
,问题是当使用格式字符串打印数字时,说明符需要不同,因为在32位机器上
int32\u t
被定义为
long
,而在64位机器上定义为
int


要确保在任何机器上编译的数据都是32位的,并且数字可以打印出来,最好的方法是什么?看起来这是一件很麻烦的事情,应该有一种更简单/更容易的方法让项目数组的长度为32位。

中定义了一些宏,这些宏正好可以帮助解决这个问题。你用

"%" PRId32

作为您的打印格式说明符,一切都会好起来。

正确的方法是

#include <inttypes.h>

是用二进制格式保存的选项吗?那么,你可以使用<代码> fDe> < /C>和<代码> Frad 。ooo-大约10秒…注意,在字符串和宏之间没有空间,这在现代C++编译器中是行不通的。一些C编译器可能会警告不兼容。@ PATATOSWATTER -问题被标记为“C”。因此,我提到C。即使没有这个,很多人也通过C++编译器运行C代码。我已经做了编辑。人们真的需要了解这些是不同的语言。
void show(int32_t the_integer) {
  printf("The 32-value is %" PRId32 " in decimal.\n", the_integer);
}