File: /usr/include/stdint.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: /*
       2:  * Copyright (c) 2000-2010 Apple Inc.
       3:  * All rights reserved.
       4:  */
       5: 
       6: #ifndef _STDINT_H_
       7: #define _STDINT_H_
       8: 
       9: #if __LP64__
      10: #define __WORDSIZE 64
      11: #else
      12: #define __WORDSIZE 32
      13: #endif
      14: 
      15: /* from ISO/IEC 988:1999 spec */
      16: 
      17: /* 7.18.1.1 Exact-width integer types */
      18: #include <sys/_types/_int8_t.h>
      19: #include <sys/_types/_int16_t.h>
      20: #include <sys/_types/_int32_t.h>
      21: #include <sys/_types/_int64_t.h>
      22: 
      23: #include <_types/_uint8_t.h>
      24: #include <_types/_uint16_t.h>
      25: #include <_types/_uint32_t.h>
      26: #include <_types/_uint64_t.h>
      27: 
      28: /* 7.18.1.2 Minimum-width integer types */
      29: typedef int8_t           int_least8_t;
      30: typedef int16_t         int_least16_t;
      31: typedef int32_t         int_least32_t;
      32: typedef int64_t         int_least64_t;
      33: typedef uint8_t         uint_least8_t;
      34: typedef uint16_t       uint_least16_t;
      35: typedef uint32_t       uint_least32_t;
      36: typedef uint64_t       uint_least64_t;
      37: 
      38: 
      39: /* 7.18.1.3 Fastest-width integer types */
      40: typedef int8_t            int_fast8_t;
      41: typedef int16_t          int_fast16_t;
      42: typedef int32_t          int_fast32_t;
      43: typedef int64_t          int_fast64_t;
      44: typedef uint8_t          uint_fast8_t;
      45: typedef uint16_t        uint_fast16_t;
      46: typedef uint32_t        uint_fast32_t;
      47: typedef uint64_t        uint_fast64_t;
      48: 
      49: 
      50: /* 7.18.1.4 Integer types capable of holding object pointers */
      51: 
      52: #include <sys/_types.h>
      53: #include <sys/_types/_intptr_t.h>
      54: #include <sys/_types/_uintptr_t.h>
      55: 
      56: 
      57: /* 7.18.1.5 Greatest-width integer types */
      58: #include <_types/_intmax_t.h>
      59: #include <_types/_uintmax_t.h>
      60: 
      61: /* 7.18.2 Limits of specified-width integer types:
      62:  *   These #defines specify the minimum and maximum limits
      63:  *   of each of the types declared above.
      64:  */
      65: 
      66: 
      67: /* 7.18.2.1 Limits of exact-width integer types */
      68: #define INT8_MAX         127
      69: #define INT16_MAX        32767
      70: #define INT32_MAX        2147483647
      71: #define INT64_MAX        9223372036854775807LL
      72: 
      73: #define INT8_MIN          -128
      74: #define INT16_MIN         -32768
      75:    /*
      76:       Note:  the literal "most negative int" cannot be written in C --
      77:       the rules in the standard (section 6.4.4.1 in C99) will give it
      78:       an unsigned type, so INT32_MIN (and the most negative member of
      79:       any larger signed type) must be written via a constant expression.
      80:    */
      81: #define INT32_MIN        (-INT32_MAX-1)
      82: #define INT64_MIN        (-INT64_MAX-1)
      83: 
      84: #define UINT8_MAX         255
      85: #define UINT16_MAX        65535
      86: #define UINT32_MAX        4294967295U
      87: #define UINT64_MAX        18446744073709551615ULL
      88: 
      89: /* 7.18.2.2 Limits of minimum-width integer types */
      90: #define INT_LEAST8_MIN    INT8_MIN
      91: #define INT_LEAST16_MIN   INT16_MIN
      92: #define INT_LEAST32_MIN   INT32_MIN
      93: #define INT_LEAST64_MIN   INT64_MIN
      94: 
      95: #define INT_LEAST8_MAX    INT8_MAX
      96: #define INT_LEAST16_MAX   INT16_MAX
      97: #define INT_LEAST32_MAX   INT32_MAX
      98: #define INT_LEAST64_MAX   INT64_MAX
      99: 
     100: #define UINT_LEAST8_MAX   UINT8_MAX
     101: #define UINT_LEAST16_MAX  UINT16_MAX
     102: #define UINT_LEAST32_MAX  UINT32_MAX
     103: #define UINT_LEAST64_MAX  UINT64_MAX
     104: 
     105: /* 7.18.2.3 Limits of fastest minimum-width integer types */
     106: #define INT_FAST8_MIN     INT8_MIN
     107: #define INT_FAST16_MIN    INT16_MIN
     108: #define INT_FAST32_MIN    INT32_MIN
     109: #define INT_FAST64_MIN    INT64_MIN
     110: 
     111: #define INT_FAST8_MAX     INT8_MAX
     112: #define INT_FAST16_MAX    INT16_MAX
     113: #define INT_FAST32_MAX    INT32_MAX
     114: #define INT_FAST64_MAX    INT64_MAX
     115: 
     116: #define UINT_FAST8_MAX    UINT8_MAX
     117: #define UINT_FAST16_MAX   UINT16_MAX
     118: #define UINT_FAST32_MAX   UINT32_MAX
     119: #define UINT_FAST64_MAX   UINT64_MAX
     120: 
     121: /* 7.18.2.4 Limits of integer types capable of holding object pointers */
     122: 
     123: #if __WORDSIZE == 64
     124: #define INTPTR_MIN      INT64_MIN
     125: #define INTPTR_MAX      INT64_MAX
     126: #else
     127: #define INTPTR_MIN        INT32_MIN
     128: #define INTPTR_MAX        INT32_MAX
     129: #endif
     130: 
     131: #if __WORDSIZE == 64
     132: #define UINTPTR_MAX      UINT64_MAX
     133: #else
     134: #define UINTPTR_MAX       UINT32_MAX
     135: #endif
     136: 
     137: /* 7.18.2.5 Limits of greatest-width integer types */
     138: #define INTMAX_MIN        INT64_MIN
     139: #define INTMAX_MAX        INT64_MAX
     140: 
     141: #define UINTMAX_MAX       UINT64_MAX
     142: 
     143: /* 7.18.3 "Other" */
     144: #if __WORDSIZE == 64
     145: #define PTRDIFF_MIN      INT64_MIN
     146: #define PTRDIFF_MAX      INT64_MAX
     147: #else
     148: #define PTRDIFF_MIN       INT32_MIN
     149: #define PTRDIFF_MAX       INT32_MAX
     150: #endif
     151: 
     152: #if __WORDSIZE == 64
     153: #define SIZE_MAX      UINT64_MAX
     154: #else
     155: #define SIZE_MAX          UINT32_MAX
     156: #endif
     157: 
     158: #if defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1
     159: #define RSIZE_MAX         (SIZE_MAX >> 1)
     160: #endif
     161: 
     162: #ifndef WCHAR_MAX
     163: #  ifdef __WCHAR_MAX__
     164: #    define WCHAR_MAX     __WCHAR_MAX__
     165: #  else
     166: #    define WCHAR_MAX     0x7fffffff
     167: #  endif
     168: #endif
     169: 
     170: /* WCHAR_MIN should be 0 if wchar_t is an unsigned type and
     171:    (-WCHAR_MAX-1) if wchar_t is a signed type.  Unfortunately,
     172:    it turns out that -fshort-wchar changes the signedness of
     173:    the type. */
     174: #ifndef WCHAR_MIN
     175: #  if WCHAR_MAX == 0xffff
     176: #    define WCHAR_MIN       0
     177: #  else
     178: #    define WCHAR_MIN       (-WCHAR_MAX-1)
     179: #  endif
     180: #endif
     181: 
     182: #define WINT_MIN      INT32_MIN
     183: #define WINT_MAX      INT32_MAX
     184: 
     185: #define SIG_ATOMIC_MIN      INT32_MIN
     186: #define SIG_ATOMIC_MAX      INT32_MAX
     187: 
     188: /* 7.18.4 Macros for integer constants */
     189: #define INT8_C(v)    (v)
     190: #define INT16_C(v)   (v)
     191: #define INT32_C(v)   (v)
     192: #define INT64_C(v)   (v ## LL)
     193: 
     194: #define UINT8_C(v)   (v ## U)
     195: #define UINT16_C(v)  (v ## U)
     196: #define UINT32_C(v)  (v ## U)
     197: #define UINT64_C(v)  (v ## ULL)
     198: 
     199: #ifdef __LP64__
     200: #define INTMAX_C(v)  (v ## L)
     201: #define UINTMAX_C(v) (v ## UL)
     202: #else
     203: #define INTMAX_C(v)  (v ## LL)
     204: #define UINTMAX_C(v) (v ## ULL)
     205: #endif
     206: 
     207: #endif /* _STDINT_H_ */
     208: