1*53ee8cc1Swenshuai.xi /* 2*53ee8cc1Swenshuai.xi * Copyright (c) 2004, 2005 by 3*53ee8cc1Swenshuai.xi * Ralf Corsepius, Ulm/Germany. All rights reserved. 4*53ee8cc1Swenshuai.xi * 5*53ee8cc1Swenshuai.xi * Permission to use, copy, modify, and distribute this software 6*53ee8cc1Swenshuai.xi * is freely granted, provided that this notice is preserved. 7*53ee8cc1Swenshuai.xi */ 8*53ee8cc1Swenshuai.xi 9*53ee8cc1Swenshuai.xi /* 10*53ee8cc1Swenshuai.xi * @todo - Add support for wint_t types. 11*53ee8cc1Swenshuai.xi */ 12*53ee8cc1Swenshuai.xi 13*53ee8cc1Swenshuai.xi #ifndef _STDINT_H 14*53ee8cc1Swenshuai.xi #define _STDINT_H 15*53ee8cc1Swenshuai.xi 16*53ee8cc1Swenshuai.xi #ifdef __cplusplus 17*53ee8cc1Swenshuai.xi extern "C" { 18*53ee8cc1Swenshuai.xi #endif 19*53ee8cc1Swenshuai.xi 20*53ee8cc1Swenshuai.xi #if defined(__GNUC__) && \ 21*53ee8cc1Swenshuai.xi ( (__GNUC__ >= 4) || \ 22*53ee8cc1Swenshuai.xi ( (__GNUC__ >= 3) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ > 2) ) ) 23*53ee8cc1Swenshuai.xi /* gcc > 3.2 implicitly defines the values we are interested */ 24*53ee8cc1Swenshuai.xi #define __STDINT_EXP(x) __##x##__ 25*53ee8cc1Swenshuai.xi #else 26*53ee8cc1Swenshuai.xi #define __STDINT_EXP(x) x 27*53ee8cc1Swenshuai.xi #include <limits.h> 28*53ee8cc1Swenshuai.xi #endif 29*53ee8cc1Swenshuai.xi 30*53ee8cc1Swenshuai.xi /* Check if "long long" is 64bit wide */ 31*53ee8cc1Swenshuai.xi /* Modern GCCs provide __LONG_LONG_MAX__, SUSv3 wants LLONG_MAX */ 32*53ee8cc1Swenshuai.xi #if ( defined(__LONG_LONG_MAX__) && (__LONG_LONG_MAX__ > 0x7fffffff) ) \ 33*53ee8cc1Swenshuai.xi || ( defined(LLONG_MAX) && (LLONG_MAX > 0x7fffffff) ) 34*53ee8cc1Swenshuai.xi #define __have_longlong64 1 35*53ee8cc1Swenshuai.xi #endif 36*53ee8cc1Swenshuai.xi 37*53ee8cc1Swenshuai.xi /* Check if "long" is 64bit or 32bit wide */ 38*53ee8cc1Swenshuai.xi #if __STDINT_EXP(LONG_MAX) > 0x7fffffff 39*53ee8cc1Swenshuai.xi #define __have_long64 1 40*53ee8cc1Swenshuai.xi #elif __STDINT_EXP(LONG_MAX) == 0x7fffffff 41*53ee8cc1Swenshuai.xi #define __have_long32 1 42*53ee8cc1Swenshuai.xi #endif 43*53ee8cc1Swenshuai.xi 44*53ee8cc1Swenshuai.xi #if __STDINT_EXP(SCHAR_MAX) == 0x7f 45*53ee8cc1Swenshuai.xi typedef signed char int8_t ; 46*53ee8cc1Swenshuai.xi typedef unsigned char uint8_t ; 47*53ee8cc1Swenshuai.xi #define __int8_t_defined 1 48*53ee8cc1Swenshuai.xi #endif 49*53ee8cc1Swenshuai.xi 50*53ee8cc1Swenshuai.xi #if __int8_t_defined 51*53ee8cc1Swenshuai.xi typedef signed char int_least8_t; 52*53ee8cc1Swenshuai.xi typedef unsigned char uint_least8_t; 53*53ee8cc1Swenshuai.xi #define __int_least8_t_defined 1 54*53ee8cc1Swenshuai.xi #endif 55*53ee8cc1Swenshuai.xi 56*53ee8cc1Swenshuai.xi #if __STDINT_EXP(SHRT_MAX) == 0x7fff 57*53ee8cc1Swenshuai.xi typedef signed short int16_t; 58*53ee8cc1Swenshuai.xi typedef unsigned short uint16_t; 59*53ee8cc1Swenshuai.xi #define __int16_t_defined 1 60*53ee8cc1Swenshuai.xi #elif __STDINT_EXP(INT_MAX) == 0x7fff 61*53ee8cc1Swenshuai.xi typedef signed int int16_t; 62*53ee8cc1Swenshuai.xi typedef unsigned int uint16_t; 63*53ee8cc1Swenshuai.xi #define __int16_t_defined 1 64*53ee8cc1Swenshuai.xi #elif __STDINT_EXP(SCHAR_MAX) == 0x7fff 65*53ee8cc1Swenshuai.xi typedef signed char int16_t; 66*53ee8cc1Swenshuai.xi typedef unsigned char uint16_t; 67*53ee8cc1Swenshuai.xi #define __int16_t_defined 1 68*53ee8cc1Swenshuai.xi #endif 69*53ee8cc1Swenshuai.xi 70*53ee8cc1Swenshuai.xi #if __int16_t_defined 71*53ee8cc1Swenshuai.xi typedef int16_t int_least16_t; 72*53ee8cc1Swenshuai.xi typedef uint16_t uint_least16_t; 73*53ee8cc1Swenshuai.xi #define __int_least16_t_defined 1 74*53ee8cc1Swenshuai.xi 75*53ee8cc1Swenshuai.xi #if !__int_least8_t_defined 76*53ee8cc1Swenshuai.xi typedef int16_t int_least8_t; 77*53ee8cc1Swenshuai.xi typedef uint16_t uint_least8_t; 78*53ee8cc1Swenshuai.xi #define __int_least8_t_defined 1 79*53ee8cc1Swenshuai.xi #endif 80*53ee8cc1Swenshuai.xi #endif 81*53ee8cc1Swenshuai.xi 82*53ee8cc1Swenshuai.xi #if __have_long32 83*53ee8cc1Swenshuai.xi typedef signed long int32_t; 84*53ee8cc1Swenshuai.xi typedef unsigned long uint32_t; 85*53ee8cc1Swenshuai.xi #define __int32_t_defined 1 86*53ee8cc1Swenshuai.xi #elif __STDINT_EXP(INT_MAX) == 0x7fffffffL 87*53ee8cc1Swenshuai.xi typedef signed int int32_t; 88*53ee8cc1Swenshuai.xi typedef unsigned int uint32_t; 89*53ee8cc1Swenshuai.xi #define __int32_t_defined 1 90*53ee8cc1Swenshuai.xi #elif __STDINT_EXP(SHRT_MAX) == 0x7fffffffL 91*53ee8cc1Swenshuai.xi typedef signed short int32_t; 92*53ee8cc1Swenshuai.xi typedef unsigned short uint32_t; 93*53ee8cc1Swenshuai.xi #define __int32_t_defined 1 94*53ee8cc1Swenshuai.xi #elif __STDINT_EXP(SCHAR_MAX) == 0x7fffffffL 95*53ee8cc1Swenshuai.xi typedef signed char int32_t; 96*53ee8cc1Swenshuai.xi typedef unsigned char uint32_t; 97*53ee8cc1Swenshuai.xi #define __int32_t_defined 1 98*53ee8cc1Swenshuai.xi #endif 99*53ee8cc1Swenshuai.xi 100*53ee8cc1Swenshuai.xi #if __int32_t_defined 101*53ee8cc1Swenshuai.xi typedef int32_t int_least32_t; 102*53ee8cc1Swenshuai.xi typedef uint32_t uint_least32_t; 103*53ee8cc1Swenshuai.xi #define __int_least32_t_defined 1 104*53ee8cc1Swenshuai.xi 105*53ee8cc1Swenshuai.xi #if !__int_least8_t_defined 106*53ee8cc1Swenshuai.xi typedef int32_t int_least8_t; 107*53ee8cc1Swenshuai.xi typedef uint32_t uint_least8_t; 108*53ee8cc1Swenshuai.xi #define __int_least8_t_defined 1 109*53ee8cc1Swenshuai.xi #endif 110*53ee8cc1Swenshuai.xi 111*53ee8cc1Swenshuai.xi #if !__int_least16_t_defined 112*53ee8cc1Swenshuai.xi typedef int32_t int_least16_t; 113*53ee8cc1Swenshuai.xi typedef uint32_t uint_least16_t; 114*53ee8cc1Swenshuai.xi #define __int_least16_t_defined 1 115*53ee8cc1Swenshuai.xi #endif 116*53ee8cc1Swenshuai.xi #endif 117*53ee8cc1Swenshuai.xi 118*53ee8cc1Swenshuai.xi #if __have_long64 119*53ee8cc1Swenshuai.xi typedef signed long int64_t; 120*53ee8cc1Swenshuai.xi typedef unsigned long uint64_t; 121*53ee8cc1Swenshuai.xi #define __int64_t_defined 1 122*53ee8cc1Swenshuai.xi #elif __have_longlong64 123*53ee8cc1Swenshuai.xi typedef signed long long int64_t; 124*53ee8cc1Swenshuai.xi typedef unsigned long long uint64_t; 125*53ee8cc1Swenshuai.xi #define __int64_t_defined 1 126*53ee8cc1Swenshuai.xi #elif __STDINT_EXP(INT_MAX) > 0x7fffffff 127*53ee8cc1Swenshuai.xi typedef signed int int64_t; 128*53ee8cc1Swenshuai.xi typedef unsigned int uint64_t; 129*53ee8cc1Swenshuai.xi #define __int64_t_defined 1 130*53ee8cc1Swenshuai.xi #endif 131*53ee8cc1Swenshuai.xi 132*53ee8cc1Swenshuai.xi #if __int64_t_defined 133*53ee8cc1Swenshuai.xi typedef int64_t int_least64_t; 134*53ee8cc1Swenshuai.xi typedef uint64_t uint_least64_t; 135*53ee8cc1Swenshuai.xi #define __int_least64_t_defined 1 136*53ee8cc1Swenshuai.xi 137*53ee8cc1Swenshuai.xi #if !__int_least8_t_defined 138*53ee8cc1Swenshuai.xi typedef int64_t int_least8_t; 139*53ee8cc1Swenshuai.xi typedef uint64_t uint_least8_t; 140*53ee8cc1Swenshuai.xi #define __int_least8_t_defined 1 141*53ee8cc1Swenshuai.xi #endif 142*53ee8cc1Swenshuai.xi 143*53ee8cc1Swenshuai.xi #if !__int_least16_t_defined 144*53ee8cc1Swenshuai.xi typedef int64_t int_least16_t; 145*53ee8cc1Swenshuai.xi typedef uint64_t uint_least16_t; 146*53ee8cc1Swenshuai.xi #define __int_least16_t_defined 1 147*53ee8cc1Swenshuai.xi #endif 148*53ee8cc1Swenshuai.xi 149*53ee8cc1Swenshuai.xi #if !__int_least32_t_defined 150*53ee8cc1Swenshuai.xi typedef int64_t int_least32_t; 151*53ee8cc1Swenshuai.xi typedef uint64_t uint_least32_t; 152*53ee8cc1Swenshuai.xi #define __int_least32_t_defined 1 153*53ee8cc1Swenshuai.xi #endif 154*53ee8cc1Swenshuai.xi #endif 155*53ee8cc1Swenshuai.xi 156*53ee8cc1Swenshuai.xi /* 157*53ee8cc1Swenshuai.xi * Fastest minimum-width integer types 158*53ee8cc1Swenshuai.xi * 159*53ee8cc1Swenshuai.xi * Assume int to be the fastest type for all types with a width 160*53ee8cc1Swenshuai.xi * less than __INT_MAX__ rsp. INT_MAX 161*53ee8cc1Swenshuai.xi */ 162*53ee8cc1Swenshuai.xi #if __STDINT_EXP(INT_MAX) >= 0x7f 163*53ee8cc1Swenshuai.xi typedef signed int int_fast8_t; 164*53ee8cc1Swenshuai.xi typedef unsigned int uint_fast8_t; 165*53ee8cc1Swenshuai.xi #define __int_fast8_t_defined 1 166*53ee8cc1Swenshuai.xi #endif 167*53ee8cc1Swenshuai.xi 168*53ee8cc1Swenshuai.xi #if __STDINT_EXP(INT_MAX) >= 0x7fff 169*53ee8cc1Swenshuai.xi typedef signed int int_fast16_t; 170*53ee8cc1Swenshuai.xi typedef unsigned int uint_fast16_t; 171*53ee8cc1Swenshuai.xi #define __int_fast16_t_defined 1 172*53ee8cc1Swenshuai.xi #endif 173*53ee8cc1Swenshuai.xi 174*53ee8cc1Swenshuai.xi #if __STDINT_EXP(INT_MAX) >= 0x7fffffff 175*53ee8cc1Swenshuai.xi typedef signed int int_fast32_t; 176*53ee8cc1Swenshuai.xi typedef unsigned int uint_fast32_t; 177*53ee8cc1Swenshuai.xi #define __int_fast32_t_defined 1 178*53ee8cc1Swenshuai.xi #endif 179*53ee8cc1Swenshuai.xi 180*53ee8cc1Swenshuai.xi #if __STDINT_EXP(INT_MAX) > 0x7fffffff 181*53ee8cc1Swenshuai.xi typedef signed int int_fast64_t; 182*53ee8cc1Swenshuai.xi typedef unsigned int uint_fast64_t; 183*53ee8cc1Swenshuai.xi #define __int_fast64_t_defined 1 184*53ee8cc1Swenshuai.xi #endif 185*53ee8cc1Swenshuai.xi 186*53ee8cc1Swenshuai.xi /* 187*53ee8cc1Swenshuai.xi * Fall back to [u]int_least<N>_t for [u]int_fast<N>_t types 188*53ee8cc1Swenshuai.xi * not having been defined, yet. 189*53ee8cc1Swenshuai.xi * Leave undefined, if [u]int_least<N>_t should not be available. 190*53ee8cc1Swenshuai.xi */ 191*53ee8cc1Swenshuai.xi #if !__int_fast8_t_defined 192*53ee8cc1Swenshuai.xi #if __int_least8_t_defined 193*53ee8cc1Swenshuai.xi typedef int_least8_t int_fast8_t; 194*53ee8cc1Swenshuai.xi typedef uint_least8_t uint_fast8_t; 195*53ee8cc1Swenshuai.xi #define __int_fast8_t_defined 1 196*53ee8cc1Swenshuai.xi #endif 197*53ee8cc1Swenshuai.xi #endif 198*53ee8cc1Swenshuai.xi 199*53ee8cc1Swenshuai.xi #if !__int_fast16_t_defined 200*53ee8cc1Swenshuai.xi #if __int_least16_t_defined 201*53ee8cc1Swenshuai.xi typedef int_least16_t int_fast16_t; 202*53ee8cc1Swenshuai.xi typedef uint_least16_t uint_fast16_t; 203*53ee8cc1Swenshuai.xi #define __int_fast16_t_defined 1 204*53ee8cc1Swenshuai.xi #endif 205*53ee8cc1Swenshuai.xi #endif 206*53ee8cc1Swenshuai.xi 207*53ee8cc1Swenshuai.xi #if !__int_fast32_t_defined 208*53ee8cc1Swenshuai.xi #if __int_least32_t_defined 209*53ee8cc1Swenshuai.xi typedef int_least32_t int_fast32_t; 210*53ee8cc1Swenshuai.xi typedef uint_least32_t uint_fast32_t; 211*53ee8cc1Swenshuai.xi #define __int_fast32_t_defined 1 212*53ee8cc1Swenshuai.xi #endif 213*53ee8cc1Swenshuai.xi #endif 214*53ee8cc1Swenshuai.xi 215*53ee8cc1Swenshuai.xi #if !__int_fast64_t_defined 216*53ee8cc1Swenshuai.xi #if __int_least64_t_defined 217*53ee8cc1Swenshuai.xi typedef int_least64_t int_fast64_t; 218*53ee8cc1Swenshuai.xi typedef uint_least64_t uint_fast64_t; 219*53ee8cc1Swenshuai.xi #define __int_fast64_t_defined 1 220*53ee8cc1Swenshuai.xi #endif 221*53ee8cc1Swenshuai.xi #endif 222*53ee8cc1Swenshuai.xi 223*53ee8cc1Swenshuai.xi /* Greatest-width integer types */ 224*53ee8cc1Swenshuai.xi /* Modern GCCs provide __INTMAX_TYPE__ */ 225*53ee8cc1Swenshuai.xi #if defined(__INTMAX_TYPE__) 226*53ee8cc1Swenshuai.xi typedef __INTMAX_TYPE__ intmax_t; 227*53ee8cc1Swenshuai.xi #elif __have_longlong64 228*53ee8cc1Swenshuai.xi typedef signed long long intmax_t; 229*53ee8cc1Swenshuai.xi #else 230*53ee8cc1Swenshuai.xi typedef signed long intmax_t; 231*53ee8cc1Swenshuai.xi #endif 232*53ee8cc1Swenshuai.xi 233*53ee8cc1Swenshuai.xi /* Modern GCCs provide __UINTMAX_TYPE__ */ 234*53ee8cc1Swenshuai.xi #if defined(__UINTMAX_TYPE__) 235*53ee8cc1Swenshuai.xi typedef __UINTMAX_TYPE__ uintmax_t; 236*53ee8cc1Swenshuai.xi #elif __have_longlong64 237*53ee8cc1Swenshuai.xi typedef unsigned long long uintmax_t; 238*53ee8cc1Swenshuai.xi #else 239*53ee8cc1Swenshuai.xi typedef unsigned long uintmax_t; 240*53ee8cc1Swenshuai.xi #endif 241*53ee8cc1Swenshuai.xi 242*53ee8cc1Swenshuai.xi /* 243*53ee8cc1Swenshuai.xi * GCC doesn't provide an appropriate macro for [u]intptr_t 244*53ee8cc1Swenshuai.xi * For now, use __PTRDIFF_TYPE__ 245*53ee8cc1Swenshuai.xi */ 246*53ee8cc1Swenshuai.xi #if defined(__PTRDIFF_TYPE__) 247*53ee8cc1Swenshuai.xi typedef signed __PTRDIFF_TYPE__ intptr_t; 248*53ee8cc1Swenshuai.xi typedef unsigned __PTRDIFF_TYPE__ uintptr_t; 249*53ee8cc1Swenshuai.xi #else 250*53ee8cc1Swenshuai.xi /* 251*53ee8cc1Swenshuai.xi * Fallback to hardcoded values, 252*53ee8cc1Swenshuai.xi * should be valid on cpu's with 32bit int/32bit void* 253*53ee8cc1Swenshuai.xi */ 254*53ee8cc1Swenshuai.xi typedef signed long intptr_t; 255*53ee8cc1Swenshuai.xi typedef unsigned long uintptr_t; 256*53ee8cc1Swenshuai.xi #endif 257*53ee8cc1Swenshuai.xi 258*53ee8cc1Swenshuai.xi /* Limits of Specified-Width Integer Types */ 259*53ee8cc1Swenshuai.xi 260*53ee8cc1Swenshuai.xi #if __int8_t_defined 261*53ee8cc1Swenshuai.xi #define INT8_MIN -128 262*53ee8cc1Swenshuai.xi #define INT8_MAX 127 263*53ee8cc1Swenshuai.xi #define UINT8_MAX 255 264*53ee8cc1Swenshuai.xi #endif 265*53ee8cc1Swenshuai.xi 266*53ee8cc1Swenshuai.xi #if __int_least8_t_defined 267*53ee8cc1Swenshuai.xi #define INT_LEAST8_MIN -128 268*53ee8cc1Swenshuai.xi #define INT_LEAST8_MAX 127 269*53ee8cc1Swenshuai.xi #define UINT_LEAST8_MAX 255 270*53ee8cc1Swenshuai.xi #else 271*53ee8cc1Swenshuai.xi #error required type int_least8_t missing 272*53ee8cc1Swenshuai.xi #endif 273*53ee8cc1Swenshuai.xi 274*53ee8cc1Swenshuai.xi #if __int16_t_defined 275*53ee8cc1Swenshuai.xi #define INT16_MIN -32768 276*53ee8cc1Swenshuai.xi #define INT16_MAX 32767 277*53ee8cc1Swenshuai.xi #define UINT16_MAX 65535 278*53ee8cc1Swenshuai.xi #endif 279*53ee8cc1Swenshuai.xi 280*53ee8cc1Swenshuai.xi #if __int_least16_t_defined 281*53ee8cc1Swenshuai.xi #define INT_LEAST16_MIN -32768 282*53ee8cc1Swenshuai.xi #define INT_LEAST16_MAX 32767 283*53ee8cc1Swenshuai.xi #define UINT_LEAST16_MAX 65535 284*53ee8cc1Swenshuai.xi #else 285*53ee8cc1Swenshuai.xi #error required type int_least16_t missing 286*53ee8cc1Swenshuai.xi #endif 287*53ee8cc1Swenshuai.xi 288*53ee8cc1Swenshuai.xi #if __int32_t_defined 289*53ee8cc1Swenshuai.xi #define INT32_MIN (-2147483647-1) 290*53ee8cc1Swenshuai.xi #define INT32_MAX 2147483647 291*53ee8cc1Swenshuai.xi #define UINT32_MAX 4294967295U 292*53ee8cc1Swenshuai.xi #endif 293*53ee8cc1Swenshuai.xi 294*53ee8cc1Swenshuai.xi #if __int_least32_t_defined 295*53ee8cc1Swenshuai.xi #define INT_LEAST32_MIN (-2147483647-1) 296*53ee8cc1Swenshuai.xi #define INT_LEAST32_MAX 2147483647 297*53ee8cc1Swenshuai.xi #define UINT_LEAST32_MAX 4294967295U 298*53ee8cc1Swenshuai.xi #else 299*53ee8cc1Swenshuai.xi #error required type int_least32_t missing 300*53ee8cc1Swenshuai.xi #endif 301*53ee8cc1Swenshuai.xi 302*53ee8cc1Swenshuai.xi #if __int64_t_defined 303*53ee8cc1Swenshuai.xi #if __have_long64 304*53ee8cc1Swenshuai.xi #define INT64_MIN (-9223372036854775807L-1L) 305*53ee8cc1Swenshuai.xi #define INT64_MAX 9223372036854775807L 306*53ee8cc1Swenshuai.xi #define UINT64_MAX 18446744073709551615U 307*53ee8cc1Swenshuai.xi #elif __have_longlong64 308*53ee8cc1Swenshuai.xi #define INT64_MIN (-9223372036854775807LL-1LL) 309*53ee8cc1Swenshuai.xi #define INT64_MAX 9223372036854775807LL 310*53ee8cc1Swenshuai.xi #define UINT64_MAX 18446744073709551615ULL 311*53ee8cc1Swenshuai.xi #endif 312*53ee8cc1Swenshuai.xi #endif 313*53ee8cc1Swenshuai.xi 314*53ee8cc1Swenshuai.xi #if __int_least64_t_defined 315*53ee8cc1Swenshuai.xi #if __have_long64 316*53ee8cc1Swenshuai.xi #define INT_LEAST64_MIN (-9223372036854775807L-1L) 317*53ee8cc1Swenshuai.xi #define INT_LEAST64_MAX 9223372036854775807L 318*53ee8cc1Swenshuai.xi #define UINT_LEAST64_MAX 18446744073709551615U 319*53ee8cc1Swenshuai.xi #elif __have_longlong64 320*53ee8cc1Swenshuai.xi #define INT_LEAST64_MIN (-9223372036854775807LL-1LL) 321*53ee8cc1Swenshuai.xi #define INT_LEAST64_MAX 9223372036854775807LL 322*53ee8cc1Swenshuai.xi #define UINT_LEAST64_MAX 18446744073709551615ULL 323*53ee8cc1Swenshuai.xi #endif 324*53ee8cc1Swenshuai.xi #endif 325*53ee8cc1Swenshuai.xi 326*53ee8cc1Swenshuai.xi #if __int_fast8_t_defined 327*53ee8cc1Swenshuai.xi #define INT_FAST8_MIN INT8_MIN 328*53ee8cc1Swenshuai.xi #define INT_FAST8_MAX INT8_MAX 329*53ee8cc1Swenshuai.xi #define UINT_FAST8_MAX UINT8_MAX 330*53ee8cc1Swenshuai.xi #endif 331*53ee8cc1Swenshuai.xi 332*53ee8cc1Swenshuai.xi #if __int_fast16_t_defined 333*53ee8cc1Swenshuai.xi #define INT_FAST16_MIN INT16_MIN 334*53ee8cc1Swenshuai.xi #define INT_FAST16_MAX INT16_MAX 335*53ee8cc1Swenshuai.xi #define UINT_FAST16_MAX UINT16_MAX 336*53ee8cc1Swenshuai.xi #endif 337*53ee8cc1Swenshuai.xi 338*53ee8cc1Swenshuai.xi #if __int_fast32_t_defined 339*53ee8cc1Swenshuai.xi #define INT_FAST32_MIN INT32_MIN 340*53ee8cc1Swenshuai.xi #define INT_FAST32_MAX INT32_MAX 341*53ee8cc1Swenshuai.xi #define UINT_FAST32_MAX UINT32_MAX 342*53ee8cc1Swenshuai.xi #endif 343*53ee8cc1Swenshuai.xi 344*53ee8cc1Swenshuai.xi #if __int_fast64_t_defined 345*53ee8cc1Swenshuai.xi #define INT_FAST64_MIN INT64_MIN 346*53ee8cc1Swenshuai.xi #define INT_FAST64_MAX INT64_MAX 347*53ee8cc1Swenshuai.xi #define UINT_FAST64_MAX UINT64_MAX 348*53ee8cc1Swenshuai.xi #endif 349*53ee8cc1Swenshuai.xi 350*53ee8cc1Swenshuai.xi /* This must match size_t in stddef.h, currently long unsigned int */ 351*53ee8cc1Swenshuai.xi #define SIZE_MIN (-__STDINT_EXP(LONG_MAX) - 1L) 352*53ee8cc1Swenshuai.xi #define SIZE_MAX __STDINT_EXP(LONG_MAX) 353*53ee8cc1Swenshuai.xi 354*53ee8cc1Swenshuai.xi /* This must match sig_atomic_t in <signal.h> (currently int) */ 355*53ee8cc1Swenshuai.xi #define SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1) 356*53ee8cc1Swenshuai.xi #define SIG_ATOMIC_MAX __STDINT_EXP(INT_MAX) 357*53ee8cc1Swenshuai.xi 358*53ee8cc1Swenshuai.xi /* This must match ptrdiff_t in <stddef.h> (currently long int) */ 359*53ee8cc1Swenshuai.xi #define PTRDIFF_MIN (-__STDINT_EXP(LONG_MAX) - 1L) 360*53ee8cc1Swenshuai.xi #define PTRDIFF_MAX __STDINT_EXP(LONG_MAX) 361*53ee8cc1Swenshuai.xi 362*53ee8cc1Swenshuai.xi /** Macros for minimum-width integer constant expressions */ 363*53ee8cc1Swenshuai.xi #define INT8_C(x) x 364*53ee8cc1Swenshuai.xi #define UINT8_C(x) x##U 365*53ee8cc1Swenshuai.xi 366*53ee8cc1Swenshuai.xi #define INT16_C(x) x 367*53ee8cc1Swenshuai.xi #define UINT16_C(x) x##U 368*53ee8cc1Swenshuai.xi 369*53ee8cc1Swenshuai.xi #if __have_long32 370*53ee8cc1Swenshuai.xi #define INT32_C(x) x##L 371*53ee8cc1Swenshuai.xi #define UINT32_C(x) x##UL 372*53ee8cc1Swenshuai.xi #else 373*53ee8cc1Swenshuai.xi #define INT32_C(x) x 374*53ee8cc1Swenshuai.xi #define UINT32_C(x) x##U 375*53ee8cc1Swenshuai.xi #endif 376*53ee8cc1Swenshuai.xi 377*53ee8cc1Swenshuai.xi #if __int64_t_defined 378*53ee8cc1Swenshuai.xi #if __have_longlong64 379*53ee8cc1Swenshuai.xi #define INT64_C(x) x##LL 380*53ee8cc1Swenshuai.xi #define UINT64_C(x) x##ULL 381*53ee8cc1Swenshuai.xi #else 382*53ee8cc1Swenshuai.xi #define INT64_C(x) x##L 383*53ee8cc1Swenshuai.xi #define UINT64_C(x) x##UL 384*53ee8cc1Swenshuai.xi #endif 385*53ee8cc1Swenshuai.xi #endif 386*53ee8cc1Swenshuai.xi 387*53ee8cc1Swenshuai.xi /** Macros for greatest-width integer constant expression */ 388*53ee8cc1Swenshuai.xi #if __have_longlong64 389*53ee8cc1Swenshuai.xi #define INTMAX_C(x) x##LL 390*53ee8cc1Swenshuai.xi #define UINTMAX_C(x) x##ULL 391*53ee8cc1Swenshuai.xi #else 392*53ee8cc1Swenshuai.xi #define INTMAX_C(x) x##L 393*53ee8cc1Swenshuai.xi #define UINTMAX_C(x) x##UL 394*53ee8cc1Swenshuai.xi #endif 395*53ee8cc1Swenshuai.xi 396*53ee8cc1Swenshuai.xi 397*53ee8cc1Swenshuai.xi #ifdef __cplusplus 398*53ee8cc1Swenshuai.xi } 399*53ee8cc1Swenshuai.xi #endif 400*53ee8cc1Swenshuai.xi 401*53ee8cc1Swenshuai.xi #endif /* _STDINT_H */ 402