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

时间:2014-05-28 04:33:13

标签: c int long-integer format-specifiers

我需要存储一个项目数组,每个项目的长度为32位。所以目前我正在使用long数组。但是我现在在另一台机器上进行编译,其中long是64位。这在签名号码时会产生问题。 (即在两台机器上打印相同的数字,一个是负数(32位),另一个是正数(64位)。

所以计划是切换到int32_t,问题是当使用格式字符串打印数字时,说明符需要与32位计算机int32_t上的不同定义为一个long,在64位计算机上,它被定义为int

确保在它编译的任何机器上都是32位的最佳方法是什么,并且可以打印这个数字?看起来这很麻烦,并且应该有一个更简单/更简单的方法来获得32位长度的项目数组。

2 个答案:

答案 0 :(得分:3)

正确的做法是

#include <inttypes.h>

然后使用格式说明符宏之一:

void show(int32_t the_integer) {
  printf("The 32-value is %" PRId32 " in decimal.\n", the_integer);
}

请参阅http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html

答案 1 :(得分:2)

<inttypes.h>中定义的宏可以帮助解决这个问题。你用

"%" PRId32

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