题
什么是声明一个整数类型,是在任何平台上始终为4个字节的最好方法?我不担心其具有16位int
某些设备或旧机器。
解决方案
#include <stdint.h>
int32_t my_32bit_int;
其他提示
C不涉及本身非常符合整数类型的确切尺寸,C99引入头 stdint.h ,这可能是你最好的选择。包括你可以使用例如int32_t
。当然,并不是所有的平台会支持。
科里的回答是“最好的”是正确的,在我看来,但一个简单的“诠释”也将在实际工作(因为你忽略了与16位int系统)。在这点上,那么多码取决于INT是32位的是系统供应商都不会改变它。
(也参见为什么长时间上大量的64位系统的和为什么我们有“长长”的32位。)
对使用int32_t的好处,不过,是你没有延续这个问题!
您可以追捕布莱恩格莱德曼的brg_types.h
的副本,如果你没有stdint.h
。
brg_types.h
会发现你的平台上的各个整数的大小和将创建常见尺寸的typedef:8,16,32和64位
您需要包括inttypes.h
而不是stdint.h
因为stdint.h
不可用在某些平台上,如Solaris和inttypes.h
将包括stdint.h
为你的系统上,如Linux。
如果包括inttypes.h
那么你的代码的Linux和Solaris之间更便携。
此链接解释我在说什么: 约inttypes.h
而这个link说明为什么你不希望你有一定数量存在于您的数据类型位的意图使用long
或int
表。
约便携式数据类型的IBM链接
如果stdint.h不适用于你的系统,使你自己的。我总是有一个文件名为“types.h中”具有的typedef所有符号/无符号8位,16位和32位的值。
也取决于你的目标平台,您可以使用您的构建系统自动工具
它会看到如果stdint.h / inttypes.h存在,并且如果它们不将在“config.h中”创建适当的typedef
stdint.h是显而易见的选择,但它并不一定可用。
如果您使用的是便携式库,这是可能的,它已经提供了便携式固定宽度的整数。
例如,SDL有Sint32
(S为“签名”),和具有GLib的gint32
。
C99或更高
使用<stdint.h>
。
如果您的实现支持2的补32位整数,那么它必须定义int32_t
。
如果没有,那么下一个最好的事情是int_least32_t
其是由至少是32位,而不管表示(二的补码,一的补,等)。
还有int_fast32_t
是一个整数型宽至少32位,以允许最快操作该尺寸要求的意图选择的。
ANSI C
可以使用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