如何在C中声明一个32位整数
在任何平台上声明一个总是4字节的整数types的最好方法是什么? 我不担心某些设备或16位int
旧机器。
#include <stdint.h> int32_t my_32bit_int;
C并不关心整数types的确切大小,C99引入了头stdint.h ,这可能是你最好的select,包括那个,你可以使用例如int32_t Ofcourse并不是所有的平台都支持这个。
在我看来,Corey的回答是“最好的”,但是一个简单的“int”在实践中也是可行的(因为你忽略了16位int的系统)。 在这一点上,这么多的代码依赖于int是32位系统供应商不会改变它。
(另请参阅为什么在很多64位系统上长32位,为什么我们要“漫长”)。
但是,使用int32_t的好处之一是,你不会永久存在这个问题!
如果你没有stdint.h
你可以search一下Brian Gladman的brg_types.h
。
brg_types.h
会发现你的平台上各种整数的大小,并将为常见的大小: brg_types.h
和64位创buildtypes定义。
您需要包含inttypes.h
而不是stdint.h
因为stdint.h
在某些平台(如Solaris)上不可用,而inttypes.h
将在Linux等系统上包含stdint.h
。 如果你包含inttypes.h
那么你的代码在Linux和Solaris之间更容易移植。
这个链接解释了我所说的: 关于inttypes.h的HP链接
而且这个链接有一张表,说明为什么你不想使用long
或者int
如果你的数据types中存在一定数量的位。 IBM链接关于便携式数据types
如果stdint.h不适用于您的系统,请自行创build。 我总是有一个名为“types.h”的文件,对所有有符号/无符号8,16和32位值都有typedef。
也取决于你的目标平台,你可以使用autotools来构build你的系统
它会查看stdint.h / inttypes.h是否存在,如果它们不会在“config.h”中创build合适的typedef
stdint.h是明显的select,但不一定可用。
如果您使用的是便携式库,则可能已经提供了可移植的固定宽度整数。 例如,SDL有Sint32
(S代表“signed”),GLib有gint32
。