1 /* Copyright (C) 1997-2022 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, see 16 <https://www.gnu.org/licenses/>. */ 17 18 /* 19 * ISO C99: 7.18 Integer types <stdint.h> 20 */ 21 22 #ifndef _STDINT_H 23 #define _STDINT_H 1 24 25 #define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION 26 #include <bits/libc-header-start.h> 27 #include <bits/types.h> 28 #include <bits/wchar.h> 29 #include <bits/wordsize.h> 30 31 /* Exact integral types. */ 32 33 /* Signed. */ 34 #include <bits/stdint-intn.h> 35 36 /* Unsigned. */ 37 #include <bits/stdint-uintn.h> 38 39 40 /* Small types. */ 41 42 /* Signed. */ 43 typedef __int_least8_t int_least8_t; 44 typedef __int_least16_t int_least16_t; 45 typedef __int_least32_t int_least32_t; 46 typedef __int_least64_t int_least64_t; 47 48 /* Unsigned. */ 49 typedef __uint_least8_t uint_least8_t; 50 typedef __uint_least16_t uint_least16_t; 51 typedef __uint_least32_t uint_least32_t; 52 typedef __uint_least64_t uint_least64_t; 53 54 55 /* Fast types. */ 56 57 /* Signed. */ 58 typedef signed char int_fast8_t; 59 #if __WORDSIZE == 64 60 typedef long int int_fast16_t; 61 typedef long int int_fast32_t; 62 typedef long int int_fast64_t; 63 #else 64 typedef int int_fast16_t; 65 typedef int int_fast32_t; 66 __extension__ 67 typedef long long int int_fast64_t; 68 #endif 69 70 /* Unsigned. */ 71 typedef unsigned char uint_fast8_t; 72 #if __WORDSIZE == 64 73 typedef unsigned long int uint_fast16_t; 74 typedef unsigned long int uint_fast32_t; 75 typedef unsigned long int uint_fast64_t; 76 #else 77 typedef unsigned int uint_fast16_t; 78 typedef unsigned int uint_fast32_t; 79 __extension__ 80 typedef unsigned long long int uint_fast64_t; 81 #endif 82 83 84 /* Types for `void *' pointers. */ 85 #if __WORDSIZE == 64 86 # ifndef __intptr_t_defined 87 typedef long int intptr_t; 88 # define __intptr_t_defined 89 # endif 90 typedef unsigned long int uintptr_t; 91 #else 92 # ifndef __intptr_t_defined 93 typedef int intptr_t; 94 # define __intptr_t_defined 95 # endif 96 typedef unsigned int uintptr_t; 97 #endif 98 99 100 /* Largest integral types. */ 101 typedef __intmax_t intmax_t; 102 typedef __uintmax_t uintmax_t; 103 104 105 # if __WORDSIZE == 64 106 # define __INT64_C(c) c ## L 107 # define __UINT64_C(c) c ## UL 108 # else 109 # define __INT64_C(c) c ## LL 110 # define __UINT64_C(c) c ## ULL 111 # endif 112 113 /* Limits of integral types. */ 114 115 /* Minimum of signed integral types. */ 116 # define INT8_MIN (-128) 117 # define INT16_MIN (-32767-1) 118 # define INT32_MIN (-2147483647-1) 119 # define INT64_MIN (-__INT64_C(9223372036854775807)-1) 120 /* Maximum of signed integral types. */ 121 # define INT8_MAX (127) 122 # define INT16_MAX (32767) 123 # define INT32_MAX (2147483647) 124 # define INT64_MAX (__INT64_C(9223372036854775807)) 125 126 /* Maximum of unsigned integral types. */ 127 # define UINT8_MAX (255) 128 # define UINT16_MAX (65535) 129 # define UINT32_MAX (4294967295U) 130 # define UINT64_MAX (__UINT64_C(18446744073709551615)) 131 132 133 /* Minimum of signed integral types having a minimum size. */ 134 # define INT_LEAST8_MIN (-128) 135 # define INT_LEAST16_MIN (-32767-1) 136 # define INT_LEAST32_MIN (-2147483647-1) 137 # define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1) 138 /* Maximum of signed integral types having a minimum size. */ 139 # define INT_LEAST8_MAX (127) 140 # define INT_LEAST16_MAX (32767) 141 # define INT_LEAST32_MAX (2147483647) 142 # define INT_LEAST64_MAX (__INT64_C(9223372036854775807)) 143 144 /* Maximum of unsigned integral types having a minimum size. */ 145 # define UINT_LEAST8_MAX (255) 146 # define UINT_LEAST16_MAX (65535) 147 # define UINT_LEAST32_MAX (4294967295U) 148 # define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615)) 149 150 151 /* Minimum of fast signed integral types having a minimum size. */ 152 # define INT_FAST8_MIN (-128) 153 # if __WORDSIZE == 64 154 # define INT_FAST16_MIN (-9223372036854775807L-1) 155 # define INT_FAST32_MIN (-9223372036854775807L-1) 156 # else 157 # define INT_FAST16_MIN (-2147483647-1) 158 # define INT_FAST32_MIN (-2147483647-1) 159 # endif 160 # define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1) 161 /* Maximum of fast signed integral types having a minimum size. */ 162 # define INT_FAST8_MAX (127) 163 # if __WORDSIZE == 64 164 # define INT_FAST16_MAX (9223372036854775807L) 165 # define INT_FAST32_MAX (9223372036854775807L) 166 # else 167 # define INT_FAST16_MAX (2147483647) 168 # define INT_FAST32_MAX (2147483647) 169 # endif 170 # define INT_FAST64_MAX (__INT64_C(9223372036854775807)) 171 172 /* Maximum of fast unsigned integral types having a minimum size. */ 173 # define UINT_FAST8_MAX (255) 174 # if __WORDSIZE == 64 175 # define UINT_FAST16_MAX (18446744073709551615UL) 176 # define UINT_FAST32_MAX (18446744073709551615UL) 177 # else 178 # define UINT_FAST16_MAX (4294967295U) 179 # define UINT_FAST32_MAX (4294967295U) 180 # endif 181 # define UINT_FAST64_MAX (__UINT64_C(18446744073709551615)) 182 183 184 /* Values to test for integral types holding `void *' pointer. */ 185 # if __WORDSIZE == 64 186 # define INTPTR_MIN (-9223372036854775807L-1) 187 # define INTPTR_MAX (9223372036854775807L) 188 # define UINTPTR_MAX (18446744073709551615UL) 189 # else 190 # define INTPTR_MIN (-2147483647-1) 191 # define INTPTR_MAX (2147483647) 192 # define UINTPTR_MAX (4294967295U) 193 # endif 194 195 196 /* Minimum for largest signed integral type. */ 197 # define INTMAX_MIN (-__INT64_C(9223372036854775807)-1) 198 /* Maximum for largest signed integral type. */ 199 # define INTMAX_MAX (__INT64_C(9223372036854775807)) 200 201 /* Maximum for largest unsigned integral type. */ 202 # define UINTMAX_MAX (__UINT64_C(18446744073709551615)) 203 204 205 /* Limits of other integer types. */ 206 207 /* Limits of `ptrdiff_t' type. */ 208 # if __WORDSIZE == 64 209 # define PTRDIFF_MIN (-9223372036854775807L-1) 210 # define PTRDIFF_MAX (9223372036854775807L) 211 # else 212 # if __WORDSIZE32_PTRDIFF_LONG 213 # define PTRDIFF_MIN (-2147483647L-1) 214 # define PTRDIFF_MAX (2147483647L) 215 # else 216 # define PTRDIFF_MIN (-2147483647-1) 217 # define PTRDIFF_MAX (2147483647) 218 # endif 219 # endif 220 221 /* Limits of `sig_atomic_t'. */ 222 # define SIG_ATOMIC_MIN (-2147483647-1) 223 # define SIG_ATOMIC_MAX (2147483647) 224 225 /* Limit of `size_t' type. */ 226 # if __WORDSIZE == 64 227 # define SIZE_MAX (18446744073709551615UL) 228 # else 229 # if __WORDSIZE32_SIZE_ULONG 230 # define SIZE_MAX (4294967295UL) 231 # else 232 # define SIZE_MAX (4294967295U) 233 # endif 234 # endif 235 236 /* Limits of `wchar_t'. */ 237 # ifndef WCHAR_MIN 238 /* These constants might also be defined in <wchar.h>. */ 239 # define WCHAR_MIN __WCHAR_MIN 240 # define WCHAR_MAX __WCHAR_MAX 241 # endif 242 243 /* Limits of `wint_t'. */ 244 # define WINT_MIN (0u) 245 # define WINT_MAX (4294967295u) 246 247 /* Signed. */ 248 # define INT8_C(c) c 249 # define INT16_C(c) c 250 # define INT32_C(c) c 251 # if __WORDSIZE == 64 252 # define INT64_C(c) c ## L 253 # else 254 # define INT64_C(c) c ## LL 255 # endif 256 257 /* Unsigned. */ 258 # define UINT8_C(c) c 259 # define UINT16_C(c) c 260 # define UINT32_C(c) c ## U 261 # if __WORDSIZE == 64 262 # define UINT64_C(c) c ## UL 263 # else 264 # define UINT64_C(c) c ## ULL 265 # endif 266 267 /* Maximal type. */ 268 # if __WORDSIZE == 64 269 # define INTMAX_C(c) c ## L 270 # define UINTMAX_C(c) c ## UL 271 # else 272 # define INTMAX_C(c) c ## LL 273 # define UINTMAX_C(c) c ## ULL 274 # endif 275 276 #if __GLIBC_USE (IEC_60559_BFP_EXT_C2X) 277 278 # define INT8_WIDTH 8 279 # define UINT8_WIDTH 8 280 # define INT16_WIDTH 16 281 # define UINT16_WIDTH 16 282 # define INT32_WIDTH 32 283 # define UINT32_WIDTH 32 284 # define INT64_WIDTH 64 285 # define UINT64_WIDTH 64 286 287 # define INT_LEAST8_WIDTH 8 288 # define UINT_LEAST8_WIDTH 8 289 # define INT_LEAST16_WIDTH 16 290 # define UINT_LEAST16_WIDTH 16 291 # define INT_LEAST32_WIDTH 32 292 # define UINT_LEAST32_WIDTH 32 293 # define INT_LEAST64_WIDTH 64 294 # define UINT_LEAST64_WIDTH 64 295 296 # define INT_FAST8_WIDTH 8 297 # define UINT_FAST8_WIDTH 8 298 # define INT_FAST16_WIDTH __WORDSIZE 299 # define UINT_FAST16_WIDTH __WORDSIZE 300 # define INT_FAST32_WIDTH __WORDSIZE 301 # define UINT_FAST32_WIDTH __WORDSIZE 302 # define INT_FAST64_WIDTH 64 303 # define UINT_FAST64_WIDTH 64 304 305 # define INTPTR_WIDTH __WORDSIZE 306 # define UINTPTR_WIDTH __WORDSIZE 307 308 # define INTMAX_WIDTH 64 309 # define UINTMAX_WIDTH 64 310 311 # define PTRDIFF_WIDTH __WORDSIZE 312 # define SIG_ATOMIC_WIDTH 32 313 # define SIZE_WIDTH __WORDSIZE 314 # define WCHAR_WIDTH 32 315 # define WINT_WIDTH 32 316 317 #endif 318 319 #endif /* stdint.h */ 320