声明在任何平台上始终为4字节的整数类型的最佳方法是什么?我不用担心某些具有16位的设备或旧机器int。
声明在任何平台上始终为4字节的整数类型的最佳方法是什么?我不用担心某些具有16位的设备或旧机器int。
Answers:
#include <stdint.h>
int32_t my_32bit_int;
<inttypes.h>”已明确记录为包括标头“ <stdint.h>”(这对于C标头并不常见),但是“ <inttypes.h>”标头在“ <stdint.h>”不可用的情况下可用,并且可能是可移植性的更好选择。在“ <stdint.h>”头是标准委员会的一项发明,并创造了让独立的C(相对于托管的实现-正常的)的实现只需要支持“ <stdint.h>”并不见得“ <inttypes.h>”太(这也意味着支持' <stdio.h>,否则就没有必要)。
uint32_t。
在我看来,Corey的答案是“最佳”的正确答案,但实际上,一个简单的“ int”也可以使用(假设您忽略了16位int的系统)。在这一点上,太多的代码取决于int是32位的,因此系统供应商不会更改它。
(另请参见为什么在许多64位系统上long是32位以及为什么我们有“ long long”。)
但是,使用int32_t的好处之一是您不会使这个问题永久存在!
您需要包含inttypes.h而不是,stdint.h因为stdint.h在某些平台(例如Solaris)上不可用,而在Linux等系统inttypes.h上将包含stdint.h您。如果包含它,inttypes.h则代码在Linux和Solaris之间更易于移植。
该链接解释了我在说什么: HP关于inttypes.h的链接
并且此链接具有一个表,该表显示了为什么不使用long或int如果您打算在数据类型中存在一定数量的位。
关于可移植数据类型的IBM链接
stdint.h是显而易见的选择,但不一定可用。
如果您使用的是可移植库,则可能已经提供了可移植的固定宽度整数。例如,SDL具有Sint32(S代表“符号”),而GLib具有gint32。
使用<stdint.h>。
如果您的实现支持2的补码32位整数,则必须定义int32_t。
如果不是,则下一个最好的选择是int_least32_t实现支持的整数类型,该整数类型至少为32位,而不考虑表示形式(二进制补码,二进制补码等)。
还有一种int_fast32_t是至少32位宽的整数类型,选择它的目的是允许针对该大小要求的最快操作。
您可以使用long,由于标准规定的最小范围要求,保证至少32位宽。
如果您希望使用最小的整数类型来适合32位数字,则可以对以下宏中使用的预处理器语句进行定义<limits.h>:
#define TARGET_MAX 2147483647L
#if SCHAR_MAX >= TARGET_MAX
typedef signed char int32;
#elif SHORT_MAX >= TARGET_MAX
typedef short int32;
#elif INT_MAX >= TARGET_MAX
typedef int int32;
#else
typedef long int32;
#endif
#undef TARGET_MAX