如何在C中声明32位整数

ZZ *_*der 71 c portability

在任何平台上声明一个总是4字节的整数类型的最佳方法是什么?我不担心某些设备或具有16位的旧机器int.

Cor*_*y D 109

#include <stdint.h>

int32_t my_32bit_int;
Run Code Online (Sandbox Code Playgroud)

  • 这就是你想要的.如果代码确实需要一个32位的int,并且你试图在不支持它们的平台上编译它,你*希望*编译器回到开发人员那里.让它选择一些其他尺寸并继续下去将是可怕的. (29认同)
  • 请注意,标题'`<inttypes.h>`'被明确记录为包含标题'`<stdint.h>`'(这对于C头文件来说不常见),但是``<inttypes.h>`'标题可以在'<stdint.h>`'不可用的地方使用,可能是更好的可移植性选择.'`<stdint.h>`'标题是标准委员会的一项发明,它的创建是为了使C的独立实现(与托管实现相对 - 正常实现)只需要支持'`stdint.h >''并且不一定'`<inttypes.h>`'(它也意味着支持'`<stdio.h>`',否则没有必要). (12认同)
  • @MatthewHerbst,`uint32_t`. (5认同)
  • 请注意,intN_t(和uintN_t)在标准方面是可选的.当且仅当系统具有满足要求的类型时,才需要定义它. (3认同)
  • 有没有办法将int32_t定义为unsigned? (2认同)

nos*_*nos 12

C并不关心整数类型的确切大小,C99引入了头文件stdint.h,这可能是你最好的选择.包括,你可以使用例如int32_t.当然并非所有平台都支持这一点.


Bro*_*ses 11

在我看来,Corey的答案对于"最佳"是正确的,但是一个简单的"int"也将在实践中起作用(假设您忽略了具有16位int的系统).此时,如此多的代码依赖于int为32位,系统供应商不会改变它.

(另请参阅为什么在很多64位系统上长32位以及为什么我们有"长期".)

但是,使用int32_t的一个好处是,你不会使这个问题永久化!

  • 是的,但使用"long"并不能解决初始请求,这恰好是32位.例如,在(至少某些类型的)64位Linux上,长64位 - 而这在实际操作中很可能会出现. (3认同)

cfr*_*ntz 5

brg_types.h如果你没有,你可以追捕Brian Gladman的副本stdint.h.

brg_types.h 将发现平台上各种整数的大小,并为常见大小创建typedef:8,16,32和64位.


Cut*_*asj 5

您需要包括inttypes.h而不是stdint.h因为stdint.h在某些平台(如Solaris)上不可用,并且inttypes.hstdint.h在Linux等系统上包含这些内容.如果包含,inttypes.h那么您的代码在Linux和Solaris之间更容易移植.

这个链接解释了我在说什么: 关于inttypes.h的HP链接

此链接有一个表格,显示您不想使用的原因,long或者int您的数据类型中是否存在特定位数的意图. 关于便携式数据类型的IBM链接