How to Declare a 32-bit Integer in C

前端 未结 9 2232
日久生厌
日久生厌 2020-12-05 03:53

What\'s the best way to declare an integer type which is always 4 byte on any platforms? I don\'t worry about certain device or old machines which has 16-bit int

相关标签:
9条回答
  • 2020-12-05 04:14
    #include <stdint.h>
    
    int32_t my_32bit_int;
    
    0 讨论(0)
  • 2020-12-05 04:18

    stdint.h is the obvious choice, but it's not necessarily available.

    If you're using a portable library, it's possible that it already provides portable fixed-width integers. For example, SDL has Sint32 (S is for “signed”), and GLib has gint32.

    0 讨论(0)
  • 2020-12-05 04:22

    also depending on your target platforms you can use autotools for your build system

    it will see if stdint.h/inttypes.h exist and if they don't will create appropriate typedefs in a "config.h"

    0 讨论(0)
  • 2020-12-05 04:25

    Corey's answer is correct for "best", in my opinion, but a simple "int" will also work in practice (given that you're ignoring systems with 16-bit int). At this point, so much code depends on int being 32-bit that system vendors aren't going to change it.

    (See also why long is 32-bit on lots of 64-bit systems and why we have "long long".)

    One of the benefits of using int32_t, though, is that you're not perpetuating this problem!

    0 讨论(0)
  • 2020-12-05 04:25

    If stdint.h is not available for your system, make your own. I always have a file called "types.h" that have typedefs for all the signed/unsigned 8, 16, and 32 bit values.

    0 讨论(0)
  • 2020-12-05 04:28

    C99 or later

    Use <stdint.h>.

    If your implementation supports 2's complement 32-bit integers then it must define int32_t.

    If not then the next best thing is int_least32_t which is an integer type supported by the implementation that is at least 32 bits, regardless of representation (two's complement, one's complement, etc.).

    There is also int_fast32_t which is an integer type at least 32-bits wide, chosen with the intention of allowing the fastest operations for that size requirement.

    ANSI C

    You can use long, which is guaranteed to be at least 32-bits wide as a result of the minimum range requirements specified by the standard.

    If you would rather use the smallest integer type to fit a 32-bit number, then you can use preprocessor statements like the following with the macros defined in <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
    
    0 讨论(0)
提交回复
热议问题