如何在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