1 /* Copyright (C) 1997,1998,1999,2000,2001,2006 Free Software Foundation, Inc. 2 This file is part of the GNU C Library. 3 4 The GNU C Library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) any later version. 8 9 The GNU C Library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public 15 License along with the GNU C Library; if not, write to the Free 16 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 17 02111-1307 USA. */ 18 19 /* 20 * ISO C99: 7.18 Integer types <stdint.h> 21 */ 22 23 #ifndef _STDINT_H 24 #define _STDINT_H 1 25 26 #include <features.h> 27 #include <bits/wchar.h> 28 #include <bits/wordsize.h> 29 30 /* Exact integral types. */ 31 32 /* Signed. */ 33 34 /* There is some amount of overlap with <sys/types.h> as known by inet code */ 35 #ifndef __int8_t_defined 36 # define __int8_t_defined 37 typedef signed char int8_t; 38 typedef short int int16_t; 39 typedef int int32_t; 40 # if __WORDSIZE == 64 41 typedef long int int64_t; 42 # else 43 __extension__ 44 typedef long long int int64_t; 45 # endif 46 #endif 47 48 /* Unsigned. */ 49 typedef unsigned char uint8_t; 50 typedef unsigned short int uint16_t; 51 #ifndef __uint32_t_defined 52 typedef unsigned int uint32_t; 53 # define __uint32_t_defined 54 #endif 55 #if __WORDSIZE == 64 56 typedef unsigned long int uint64_t; 57 #else 58 __extension__ 59 typedef unsigned long long int uint64_t; 60 #endif 61 62 63 /* Small types. */ 64 65 /* Signed. */ 66 typedef signed char int_least8_t; 67 typedef short int int_least16_t; 68 typedef int int_least32_t; 69 #if __WORDSIZE == 64 70 typedef long int int_least64_t; 71 #else 72 __extension__ 73 typedef long long int int_least64_t; 74 #endif 75 76 /* Unsigned. */ 77 typedef unsigned char uint_least8_t; 78 typedef unsigned short int uint_least16_t; 79 typedef unsigned int uint_least32_t; 80 #if __WORDSIZE == 64 81 typedef unsigned long int uint_least64_t; 82 #else 83 __extension__ 84 typedef unsigned long long int uint_least64_t; 85 #endif 86 87 88 /* Fast types. */ 89 90 /* Signed. */ 91 typedef signed char int_fast8_t; 92 #if __WORDSIZE == 64 93 typedef long int int_fast16_t; 94 typedef long int int_fast32_t; 95 typedef long int int_fast64_t; 96 #else 97 typedef int int_fast16_t; 98 typedef int int_fast32_t; 99 __extension__ 100 typedef long long int int_fast64_t; 101 #endif 102 103 /* Unsigned. */ 104 typedef unsigned char uint_fast8_t; 105 #if __WORDSIZE == 64 106 typedef unsigned long int uint_fast16_t; 107 typedef unsigned long int uint_fast32_t; 108 typedef unsigned long int uint_fast64_t; 109 #else 110 typedef unsigned int uint_fast16_t; 111 typedef unsigned int uint_fast32_t; 112 __extension__ 113 typedef unsigned long long int uint_fast64_t; 114 #endif 115 116 117 /* Types for `void *' pointers. */ 118 #if __WORDSIZE == 64 119 # ifndef __intptr_t_defined 120 typedef long int intptr_t; 121 # define __intptr_t_defined 122 # endif 123 typedef unsigned long int uintptr_t; 124 #else 125 # ifndef __intptr_t_defined 126 typedef int intptr_t; 127 # define __intptr_t_defined 128 # endif 129 typedef unsigned int uintptr_t; 130 #endif 131 132 133 /* Largest integral types. */ 134 #if __WORDSIZE == 64 135 typedef long int intmax_t; 136 typedef unsigned long int uintmax_t; 137 #else 138 __extension__ 139 typedef long long int intmax_t; 140 __extension__ 141 typedef unsigned long long int uintmax_t; 142 #endif 143 144 145 /* The ISO C99 standard specifies that in C++ implementations these 146 macros should only be defined if explicitly requested. */ 147 #if !defined __cplusplus || defined __STDC_LIMIT_MACROS 148 149 # if __WORDSIZE == 64 150 # define __INT64_C(c) c ## L 151 # define __UINT64_C(c) c ## UL 152 # else 153 # define __INT64_C(c) c ## LL 154 # define __UINT64_C(c) c ## ULL 155 # endif 156 157 /* Limits of integral types. */ 158 159 /* Minimum of signed integral types. */ 160 # define INT8_MIN (-128) 161 # define INT16_MIN (-32767-1) 162 # define INT32_MIN (-2147483647-1) 163 # define INT64_MIN (-__INT64_C(9223372036854775807)-1) 164 /* Maximum of signed integral types. */ 165 # define INT8_MAX (127) 166 # define INT16_MAX (32767) 167 # define INT32_MAX (2147483647) 168 # define INT64_MAX (__INT64_C(9223372036854775807)) 169 170 /* Maximum of unsigned integral types. */ 171 # define UINT8_MAX (255) 172 # define UINT16_MAX (65535) 173 # define UINT32_MAX (4294967295U) 174 # define UINT64_MAX (__UINT64_C(18446744073709551615)) 175 176 177 /* Minimum of signed integral types having a minimum size. */ 178 # define INT_LEAST8_MIN (-128) 179 # define INT_LEAST16_MIN (-32767-1) 180 # define INT_LEAST32_MIN (-2147483647-1) 181 # define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1) 182 /* Maximum of signed integral types having a minimum size. */ 183 # define INT_LEAST8_MAX (127) 184 # define INT_LEAST16_MAX (32767) 185 # define INT_LEAST32_MAX (2147483647) 186 # define INT_LEAST64_MAX (__INT64_C(9223372036854775807)) 187 188 /* Maximum of unsigned integral types having a minimum size. */ 189 # define UINT_LEAST8_MAX (255) 190 # define UINT_LEAST16_MAX (65535) 191 # define UINT_LEAST32_MAX (4294967295U) 192 # define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615)) 193 194 195 /* Minimum of fast signed integral types having a minimum size. */ 196 # define INT_FAST8_MIN (-128) 197 # if __WORDSIZE == 64 198 # define INT_FAST16_MIN (-9223372036854775807L-1) 199 # define INT_FAST32_MIN (-9223372036854775807L-1) 200 # else 201 # define INT_FAST16_MIN (-2147483647-1) 202 # define INT_FAST32_MIN (-2147483647-1) 203 # endif 204 # define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1) 205 /* Maximum of fast signed integral types having a minimum size. */ 206 # define INT_FAST8_MAX (127) 207 # if __WORDSIZE == 64 208 # define INT_FAST16_MAX (9223372036854775807L) 209 # define INT_FAST32_MAX (9223372036854775807L) 210 # else 211 # define INT_FAST16_MAX (2147483647) 212 # define INT_FAST32_MAX (2147483647) 213 # endif 214 # define INT_FAST64_MAX (__INT64_C(9223372036854775807)) 215 216 /* Maximum of fast unsigned integral types having a minimum size. */ 217 # define UINT_FAST8_MAX (255) 218 # if __WORDSIZE == 64 219 # define UINT_FAST16_MAX (18446744073709551615UL) 220 # define UINT_FAST32_MAX (18446744073709551615UL) 221 # else 222 # define UINT_FAST16_MAX (4294967295U) 223 # define UINT_FAST32_MAX (4294967295U) 224 # endif 225 # define UINT_FAST64_MAX (__UINT64_C(18446744073709551615)) 226 227 228 /* Values to test for integral types holding `void *' pointer. */ 229 # if __WORDSIZE == 64 230 # define INTPTR_MIN (-9223372036854775807L-1) 231 # define INTPTR_MAX (9223372036854775807L) 232 # define UINTPTR_MAX (18446744073709551615UL) 233 # else 234 # define INTPTR_MIN (-2147483647-1) 235 # define INTPTR_MAX (2147483647) 236 # define UINTPTR_MAX (4294967295U) 237 # endif 238 239 240 /* Minimum for largest signed integral type. */ 241 # define INTMAX_MIN (-__INT64_C(9223372036854775807)-1) 242 /* Maximum for largest signed integral type. */ 243 # define INTMAX_MAX (__INT64_C(9223372036854775807)) 244 245 /* Maximum for largest unsigned integral type. */ 246 # define UINTMAX_MAX (__UINT64_C(18446744073709551615)) 247 248 249 /* Limits of other integer types. */ 250 251 /* Limits of `ptrdiff_t' type. */ 252 # if __WORDSIZE == 64 253 # define PTRDIFF_MIN (-9223372036854775807L-1) 254 # define PTRDIFF_MAX (9223372036854775807L) 255 # else 256 # define PTRDIFF_MIN (-2147483647-1) 257 # define PTRDIFF_MAX (2147483647) 258 # endif 259 260 /* Limits of `sig_atomic_t'. */ 261 # define SIG_ATOMIC_MIN (-2147483647-1) 262 # define SIG_ATOMIC_MAX (2147483647) 263 264 /* Limit of `size_t' type. */ 265 # if __WORDSIZE == 64 266 # define SIZE_MAX (18446744073709551615UL) 267 # else 268 # define SIZE_MAX (4294967295U) 269 # endif 270 271 /* Limits of `wchar_t'. */ 272 # ifndef WCHAR_MIN 273 /* These constants might also be defined in <wchar.h>. */ 274 # define WCHAR_MIN __WCHAR_MIN 275 # define WCHAR_MAX __WCHAR_MAX 276 # endif 277 278 /* Limits of `wint_t'. */ 279 # define WINT_MIN (0u) 280 # define WINT_MAX (4294967295u) 281 282 #endif /* C++ && limit macros */ 283 284 285 /* The ISO C99 standard specifies that in C++ implementations these 286 should only be defined if explicitly requested. */ 287 #if !defined __cplusplus || defined __STDC_CONSTANT_MACROS 288 289 /* Signed. */ 290 # define INT8_C(c) c 291 # define INT16_C(c) c 292 # define INT32_C(c) c 293 # if __WORDSIZE == 64 294 # define INT64_C(c) c ## L 295 # else 296 # define INT64_C(c) c ## LL 297 # endif 298 299 /* Unsigned. */ 300 # define UINT8_C(c) c 301 # define UINT16_C(c) c 302 # define UINT32_C(c) c ## U 303 # if __WORDSIZE == 64 304 # define UINT64_C(c) c ## UL 305 # else 306 # define UINT64_C(c) c ## ULL 307 # endif 308 309 /* Maximal type. */ 310 # if __WORDSIZE == 64 311 # define INTMAX_C(c) c ## L 312 # define UINTMAX_C(c) c ## UL 313 # else 314 # define INTMAX_C(c) c ## LL 315 # define UINTMAX_C(c) c ## ULL 316 # endif 317 318 #endif /* C++ && constant macros */ 319 320 #endif /* stdint.h */ 321