1 /* Copyright (C) 2001-2002, 2004-2014 Free Software Foundation, Inc. 2 Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. 3 This file is part of gnulib. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU Lesser General Public License as published by 7 the Free Software Foundation; either version 2.1, or (at your option) 8 any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public License 16 along with this program; if not, see <http://www.gnu.org/licenses/>. */ 17 18 /* 19 * ISO C 99 <stdint.h> for platforms that lack it. 20 * <http://www.opengroup.org/susv3xbd/stdint.h.html> 21 */ 22 23 #ifndef _@GUARD_PREFIX@_STDINT_H 24 25 #if __GNUC__ >= 3 26 @PRAGMA_SYSTEM_HEADER@ 27 #endif 28 @PRAGMA_COLUMNS@ 29 30 /* When including a system file that in turn includes <inttypes.h>, 31 use the system <inttypes.h>, not our substitute. This avoids 32 problems with (for example) VMS, whose <sys/bitypes.h> includes 33 <inttypes.h>. */ 34 #define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H 35 36 /* On Android (Bionic libc), <sys/types.h> includes this file before 37 having defined 'time_t'. Therefore in this case avoid including 38 other system header files; just include the system's <stdint.h>. 39 Ideally we should test __BIONIC__ here, but it is only defined after 40 <sys/cdefs.h> has been included; hence test __ANDROID__ instead. */ 41 #if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H 42 # @INCLUDE_NEXT@ @NEXT_STDINT_H@ 43 #else 44 45 /* Get those types that are already defined in other system include 46 files, so that we can "#define int8_t signed char" below without 47 worrying about a later system include file containing a "typedef 48 signed char int8_t;" that will get messed up by our macro. Our 49 macros should all be consistent with the system versions, except 50 for the "fast" types and macros, which we recommend against using 51 in public interfaces due to compiler differences. */ 52 53 #if @HAVE_STDINT_H@ 54 # if defined __sgi && ! defined __c99 55 /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users 56 with "This header file is to be used only for c99 mode compilations" 57 diagnostics. */ 58 # define __STDINT_H__ 59 # endif 60 61 /* Some pre-C++11 <stdint.h> implementations need this. */ 62 # ifdef __cplusplus 63 # ifndef __STDC_CONSTANT_MACROS 64 # define __STDC_CONSTANT_MACROS 1 65 # endif 66 # ifndef __STDC_LIMIT_MACROS 67 # define __STDC_LIMIT_MACROS 1 68 # endif 69 # endif 70 71 /* Other systems may have an incomplete or buggy <stdint.h>. 72 Include it before <inttypes.h>, since any "#include <stdint.h>" 73 in <inttypes.h> would reinclude us, skipping our contents because 74 _@GUARD_PREFIX@_STDINT_H is defined. 75 The include_next requires a split double-inclusion guard. */ 76 # @INCLUDE_NEXT@ @NEXT_STDINT_H@ 77 #endif 78 79 #if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H 80 #define _@GUARD_PREFIX@_STDINT_H 81 82 /* <sys/types.h> defines some of the stdint.h types as well, on glibc, 83 IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>). 84 AIX 5.2 <sys/types.h> isn't needed and causes troubles. 85 Mac OS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but 86 relies on the system <stdint.h> definitions, so include 87 <sys/types.h> after @NEXT_STDINT_H@. */ 88 #if @HAVE_SYS_TYPES_H@ && ! defined _AIX 89 # include <sys/types.h> 90 #endif 91 92 /* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, 93 LONG_MIN, LONG_MAX, ULONG_MAX. */ 94 #include <limits.h> 95 96 #if @HAVE_INTTYPES_H@ 97 /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines 98 int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. 99 <inttypes.h> also defines intptr_t and uintptr_t. */ 100 # include <inttypes.h> 101 #elif @HAVE_SYS_INTTYPES_H@ 102 /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and 103 the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ 104 # include <sys/inttypes.h> 105 #endif 106 107 #if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ 108 /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines 109 int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is 110 included by <sys/types.h>. */ 111 # include <sys/bitypes.h> 112 #endif 113 114 #undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H 115 116 /* Minimum and maximum values for an integer type under the usual assumption. 117 Return an unspecified value if BITS == 0, adding a check to pacify 118 picky compilers. */ 119 120 #define _STDINT_MIN(signed, bits, zero) \ 121 ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero)) 122 123 #define _STDINT_MAX(signed, bits, zero) \ 124 ((signed) \ 125 ? ~ _STDINT_MIN (signed, bits, zero) \ 126 : /* The expression for the unsigned case. The subtraction of (signed) \ 127 is a nop in the unsigned case and avoids "signed integer overflow" \ 128 warnings in the signed case. */ \ 129 ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) 130 131 #if !GNULIB_defined_stdint_types 132 133 /* 7.18.1.1. Exact-width integer types */ 134 135 /* Here we assume a standard architecture where the hardware integer 136 types have 8, 16, 32, optionally 64 bits. */ 137 138 #undef int8_t 139 #undef uint8_t 140 typedef signed char gl_int8_t; 141 typedef unsigned char gl_uint8_t; 142 #define int8_t gl_int8_t 143 #define uint8_t gl_uint8_t 144 145 #undef int16_t 146 #undef uint16_t 147 typedef short int gl_int16_t; 148 typedef unsigned short int gl_uint16_t; 149 #define int16_t gl_int16_t 150 #define uint16_t gl_uint16_t 151 152 #undef int32_t 153 #undef uint32_t 154 typedef int gl_int32_t; 155 typedef unsigned int gl_uint32_t; 156 #define int32_t gl_int32_t 157 #define uint32_t gl_uint32_t 158 159 /* If the system defines INT64_MAX, assume int64_t works. That way, 160 if the underlying platform defines int64_t to be a 64-bit long long 161 int, the code below won't mistakenly define it to be a 64-bit long 162 int, which would mess up C++ name mangling. We must use #ifdef 163 rather than #if, to avoid an error with HP-UX 10.20 cc. */ 164 165 #ifdef INT64_MAX 166 # define GL_INT64_T 167 #else 168 /* Do not undefine int64_t if gnulib is not being used with 64-bit 169 types, since otherwise it breaks platforms like Tandem/NSK. */ 170 # if LONG_MAX >> 31 >> 31 == 1 171 # undef int64_t 172 typedef long int gl_int64_t; 173 # define int64_t gl_int64_t 174 # define GL_INT64_T 175 # elif defined _MSC_VER 176 # undef int64_t 177 typedef __int64 gl_int64_t; 178 # define int64_t gl_int64_t 179 # define GL_INT64_T 180 # elif @HAVE_LONG_LONG_INT@ 181 # undef int64_t 182 typedef long long int gl_int64_t; 183 # define int64_t gl_int64_t 184 # define GL_INT64_T 185 # endif 186 #endif 187 188 #ifdef UINT64_MAX 189 # define GL_UINT64_T 190 #else 191 # if ULONG_MAX >> 31 >> 31 >> 1 == 1 192 # undef uint64_t 193 typedef unsigned long int gl_uint64_t; 194 # define uint64_t gl_uint64_t 195 # define GL_UINT64_T 196 # elif defined _MSC_VER 197 # undef uint64_t 198 typedef unsigned __int64 gl_uint64_t; 199 # define uint64_t gl_uint64_t 200 # define GL_UINT64_T 201 # elif @HAVE_UNSIGNED_LONG_LONG_INT@ 202 # undef uint64_t 203 typedef unsigned long long int gl_uint64_t; 204 # define uint64_t gl_uint64_t 205 # define GL_UINT64_T 206 # endif 207 #endif 208 209 /* Avoid collision with Solaris 2.5.1 <pthread.h> etc. */ 210 #define _UINT8_T 211 #define _UINT32_T 212 #define _UINT64_T 213 214 215 /* 7.18.1.2. Minimum-width integer types */ 216 217 /* Here we assume a standard architecture where the hardware integer 218 types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types 219 are the same as the corresponding N_t types. */ 220 221 #undef int_least8_t 222 #undef uint_least8_t 223 #undef int_least16_t 224 #undef uint_least16_t 225 #undef int_least32_t 226 #undef uint_least32_t 227 #undef int_least64_t 228 #undef uint_least64_t 229 #define int_least8_t int8_t 230 #define uint_least8_t uint8_t 231 #define int_least16_t int16_t 232 #define uint_least16_t uint16_t 233 #define int_least32_t int32_t 234 #define uint_least32_t uint32_t 235 #ifdef GL_INT64_T 236 # define int_least64_t int64_t 237 #endif 238 #ifdef GL_UINT64_T 239 # define uint_least64_t uint64_t 240 #endif 241 242 /* 7.18.1.3. Fastest minimum-width integer types */ 243 244 /* Note: Other <stdint.h> substitutes may define these types differently. 245 It is not recommended to use these types in public header files. */ 246 247 /* Here we assume a standard architecture where the hardware integer 248 types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types 249 are taken from the same list of types. The following code normally 250 uses types consistent with glibc, as that lessens the chance of 251 incompatibility with older GNU hosts. */ 252 253 #undef int_fast8_t 254 #undef uint_fast8_t 255 #undef int_fast16_t 256 #undef uint_fast16_t 257 #undef int_fast32_t 258 #undef uint_fast32_t 259 #undef int_fast64_t 260 #undef uint_fast64_t 261 typedef signed char gl_int_fast8_t; 262 typedef unsigned char gl_uint_fast8_t; 263 264 #ifdef __sun 265 /* Define types compatible with SunOS 5.10, so that code compiled under 266 earlier SunOS versions works with code compiled under SunOS 5.10. */ 267 typedef int gl_int_fast32_t; 268 typedef unsigned int gl_uint_fast32_t; 269 #else 270 typedef long int gl_int_fast32_t; 271 typedef unsigned long int gl_uint_fast32_t; 272 #endif 273 typedef gl_int_fast32_t gl_int_fast16_t; 274 typedef gl_uint_fast32_t gl_uint_fast16_t; 275 276 #define int_fast8_t gl_int_fast8_t 277 #define uint_fast8_t gl_uint_fast8_t 278 #define int_fast16_t gl_int_fast16_t 279 #define uint_fast16_t gl_uint_fast16_t 280 #define int_fast32_t gl_int_fast32_t 281 #define uint_fast32_t gl_uint_fast32_t 282 #ifdef GL_INT64_T 283 # define int_fast64_t int64_t 284 #endif 285 #ifdef GL_UINT64_T 286 # define uint_fast64_t uint64_t 287 #endif 288 289 /* 7.18.1.4. Integer types capable of holding object pointers */ 290 291 #undef intptr_t 292 #undef uintptr_t 293 typedef long int gl_intptr_t; 294 typedef unsigned long int gl_uintptr_t; 295 #define intptr_t gl_intptr_t 296 #define uintptr_t gl_uintptr_t 297 298 /* 7.18.1.5. Greatest-width integer types */ 299 300 /* Note: These types are compiler dependent. It may be unwise to use them in 301 public header files. */ 302 303 /* If the system defines INTMAX_MAX, assume that intmax_t works, and 304 similarly for UINTMAX_MAX and uintmax_t. This avoids problems with 305 assuming one type where another is used by the system. */ 306 307 #ifndef INTMAX_MAX 308 # undef INTMAX_C 309 # undef intmax_t 310 # if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 311 typedef long long int gl_intmax_t; 312 # define intmax_t gl_intmax_t 313 # elif defined GL_INT64_T 314 # define intmax_t int64_t 315 # else 316 typedef long int gl_intmax_t; 317 # define intmax_t gl_intmax_t 318 # endif 319 #endif 320 321 #ifndef UINTMAX_MAX 322 # undef UINTMAX_C 323 # undef uintmax_t 324 # if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 325 typedef unsigned long long int gl_uintmax_t; 326 # define uintmax_t gl_uintmax_t 327 # elif defined GL_UINT64_T 328 # define uintmax_t uint64_t 329 # else 330 typedef unsigned long int gl_uintmax_t; 331 # define uintmax_t gl_uintmax_t 332 # endif 333 #endif 334 335 /* Verify that intmax_t and uintmax_t have the same size. Too much code 336 breaks if this is not the case. If this check fails, the reason is likely 337 to be found in the autoconf macros. */ 338 typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) 339 ? 1 : -1]; 340 341 #define GNULIB_defined_stdint_types 1 342 #endif /* !GNULIB_defined_stdint_types */ 343 344 /* 7.18.2. Limits of specified-width integer types */ 345 346 /* 7.18.2.1. Limits of exact-width integer types */ 347 348 /* Here we assume a standard architecture where the hardware integer 349 types have 8, 16, 32, optionally 64 bits. */ 350 351 #undef INT8_MIN 352 #undef INT8_MAX 353 #undef UINT8_MAX 354 #define INT8_MIN (~ INT8_MAX) 355 #define INT8_MAX 127 356 #define UINT8_MAX 255 357 358 #undef INT16_MIN 359 #undef INT16_MAX 360 #undef UINT16_MAX 361 #define INT16_MIN (~ INT16_MAX) 362 #define INT16_MAX 32767 363 #define UINT16_MAX 65535 364 365 #undef INT32_MIN 366 #undef INT32_MAX 367 #undef UINT32_MAX 368 #define INT32_MIN (~ INT32_MAX) 369 #define INT32_MAX 2147483647 370 #define UINT32_MAX 4294967295U 371 372 #if defined GL_INT64_T && ! defined INT64_MAX 373 /* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 374 evaluates the latter incorrectly in preprocessor expressions. */ 375 # define INT64_MIN (- INTMAX_C (1) << 63) 376 # define INT64_MAX INTMAX_C (9223372036854775807) 377 #endif 378 379 #if defined GL_UINT64_T && ! defined UINT64_MAX 380 # define UINT64_MAX UINTMAX_C (18446744073709551615) 381 #endif 382 383 /* 7.18.2.2. Limits of minimum-width integer types */ 384 385 /* Here we assume a standard architecture where the hardware integer 386 types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types 387 are the same as the corresponding N_t types. */ 388 389 #undef INT_LEAST8_MIN 390 #undef INT_LEAST8_MAX 391 #undef UINT_LEAST8_MAX 392 #define INT_LEAST8_MIN INT8_MIN 393 #define INT_LEAST8_MAX INT8_MAX 394 #define UINT_LEAST8_MAX UINT8_MAX 395 396 #undef INT_LEAST16_MIN 397 #undef INT_LEAST16_MAX 398 #undef UINT_LEAST16_MAX 399 #define INT_LEAST16_MIN INT16_MIN 400 #define INT_LEAST16_MAX INT16_MAX 401 #define UINT_LEAST16_MAX UINT16_MAX 402 403 #undef INT_LEAST32_MIN 404 #undef INT_LEAST32_MAX 405 #undef UINT_LEAST32_MAX 406 #define INT_LEAST32_MIN INT32_MIN 407 #define INT_LEAST32_MAX INT32_MAX 408 #define UINT_LEAST32_MAX UINT32_MAX 409 410 #undef INT_LEAST64_MIN 411 #undef INT_LEAST64_MAX 412 #ifdef GL_INT64_T 413 # define INT_LEAST64_MIN INT64_MIN 414 # define INT_LEAST64_MAX INT64_MAX 415 #endif 416 417 #undef UINT_LEAST64_MAX 418 #ifdef GL_UINT64_T 419 # define UINT_LEAST64_MAX UINT64_MAX 420 #endif 421 422 /* 7.18.2.3. Limits of fastest minimum-width integer types */ 423 424 /* Here we assume a standard architecture where the hardware integer 425 types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types 426 are taken from the same list of types. */ 427 428 #undef INT_FAST8_MIN 429 #undef INT_FAST8_MAX 430 #undef UINT_FAST8_MAX 431 #define INT_FAST8_MIN SCHAR_MIN 432 #define INT_FAST8_MAX SCHAR_MAX 433 #define UINT_FAST8_MAX UCHAR_MAX 434 435 #undef INT_FAST16_MIN 436 #undef INT_FAST16_MAX 437 #undef UINT_FAST16_MAX 438 #define INT_FAST16_MIN INT_FAST32_MIN 439 #define INT_FAST16_MAX INT_FAST32_MAX 440 #define UINT_FAST16_MAX UINT_FAST32_MAX 441 442 #undef INT_FAST32_MIN 443 #undef INT_FAST32_MAX 444 #undef UINT_FAST32_MAX 445 #ifdef __sun 446 # define INT_FAST32_MIN INT_MIN 447 # define INT_FAST32_MAX INT_MAX 448 # define UINT_FAST32_MAX UINT_MAX 449 #else 450 # define INT_FAST32_MIN LONG_MIN 451 # define INT_FAST32_MAX LONG_MAX 452 # define UINT_FAST32_MAX ULONG_MAX 453 #endif 454 455 #undef INT_FAST64_MIN 456 #undef INT_FAST64_MAX 457 #ifdef GL_INT64_T 458 # define INT_FAST64_MIN INT64_MIN 459 # define INT_FAST64_MAX INT64_MAX 460 #endif 461 462 #undef UINT_FAST64_MAX 463 #ifdef GL_UINT64_T 464 # define UINT_FAST64_MAX UINT64_MAX 465 #endif 466 467 /* 7.18.2.4. Limits of integer types capable of holding object pointers */ 468 469 #undef INTPTR_MIN 470 #undef INTPTR_MAX 471 #undef UINTPTR_MAX 472 #define INTPTR_MIN LONG_MIN 473 #define INTPTR_MAX LONG_MAX 474 #define UINTPTR_MAX ULONG_MAX 475 476 /* 7.18.2.5. Limits of greatest-width integer types */ 477 478 #ifndef INTMAX_MAX 479 # undef INTMAX_MIN 480 # ifdef INT64_MAX 481 # define INTMAX_MIN INT64_MIN 482 # define INTMAX_MAX INT64_MAX 483 # else 484 # define INTMAX_MIN INT32_MIN 485 # define INTMAX_MAX INT32_MAX 486 # endif 487 #endif 488 489 #ifndef UINTMAX_MAX 490 # ifdef UINT64_MAX 491 # define UINTMAX_MAX UINT64_MAX 492 # else 493 # define UINTMAX_MAX UINT32_MAX 494 # endif 495 #endif 496 497 /* 7.18.3. Limits of other integer types */ 498 499 /* ptrdiff_t limits */ 500 #undef PTRDIFF_MIN 501 #undef PTRDIFF_MAX 502 #if @APPLE_UNIVERSAL_BUILD@ 503 # ifdef _LP64 504 # define PTRDIFF_MIN _STDINT_MIN (1, 64, 0l) 505 # define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) 506 # else 507 # define PTRDIFF_MIN _STDINT_MIN (1, 32, 0) 508 # define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) 509 # endif 510 #else 511 # define PTRDIFF_MIN \ 512 _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) 513 # define PTRDIFF_MAX \ 514 _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) 515 #endif 516 517 /* sig_atomic_t limits */ 518 #undef SIG_ATOMIC_MIN 519 #undef SIG_ATOMIC_MAX 520 #define SIG_ATOMIC_MIN \ 521 _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ 522 0@SIG_ATOMIC_T_SUFFIX@) 523 #define SIG_ATOMIC_MAX \ 524 _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ 525 0@SIG_ATOMIC_T_SUFFIX@) 526 527 528 /* size_t limit */ 529 #undef SIZE_MAX 530 #if @APPLE_UNIVERSAL_BUILD@ 531 # ifdef _LP64 532 # define SIZE_MAX _STDINT_MAX (0, 64, 0ul) 533 # else 534 # define SIZE_MAX _STDINT_MAX (0, 32, 0ul) 535 # endif 536 #else 537 # define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) 538 #endif 539 540 /* wchar_t limits */ 541 /* Get WCHAR_MIN, WCHAR_MAX. 542 This include is not on the top, above, because on OSF/1 4.0 we have a 543 sequence of nested includes 544 <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes 545 <stdint.h> and assumes its types are already defined. */ 546 #if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX) 547 /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be 548 included before <wchar.h>. */ 549 # include <stddef.h> 550 # include <stdio.h> 551 # include <time.h> 552 # define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H 553 # include <wchar.h> 554 # undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H 555 #endif 556 #undef WCHAR_MIN 557 #undef WCHAR_MAX 558 #define WCHAR_MIN \ 559 _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) 560 #define WCHAR_MAX \ 561 _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) 562 563 /* wint_t limits */ 564 #undef WINT_MIN 565 #undef WINT_MAX 566 #define WINT_MIN \ 567 _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) 568 #define WINT_MAX \ 569 _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) 570 571 /* 7.18.4. Macros for integer constants */ 572 573 /* 7.18.4.1. Macros for minimum-width integer constants */ 574 /* According to ISO C 99 Technical Corrigendum 1 */ 575 576 /* Here we assume a standard architecture where the hardware integer 577 types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ 578 579 #undef INT8_C 580 #undef UINT8_C 581 #define INT8_C(x) x 582 #define UINT8_C(x) x 583 584 #undef INT16_C 585 #undef UINT16_C 586 #define INT16_C(x) x 587 #define UINT16_C(x) x 588 589 #undef INT32_C 590 #undef UINT32_C 591 #define INT32_C(x) x 592 #define UINT32_C(x) x ## U 593 594 #undef INT64_C 595 #undef UINT64_C 596 #if LONG_MAX >> 31 >> 31 == 1 597 # define INT64_C(x) x##L 598 #elif defined _MSC_VER 599 # define INT64_C(x) x##i64 600 #elif @HAVE_LONG_LONG_INT@ 601 # define INT64_C(x) x##LL 602 #endif 603 #if ULONG_MAX >> 31 >> 31 >> 1 == 1 604 # define UINT64_C(x) x##UL 605 #elif defined _MSC_VER 606 # define UINT64_C(x) x##ui64 607 #elif @HAVE_UNSIGNED_LONG_LONG_INT@ 608 # define UINT64_C(x) x##ULL 609 #endif 610 611 /* 7.18.4.2. Macros for greatest-width integer constants */ 612 613 #ifndef INTMAX_C 614 # if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 615 # define INTMAX_C(x) x##LL 616 # elif defined GL_INT64_T 617 # define INTMAX_C(x) INT64_C(x) 618 # else 619 # define INTMAX_C(x) x##L 620 # endif 621 #endif 622 623 #ifndef UINTMAX_C 624 # if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 625 # define UINTMAX_C(x) x##ULL 626 # elif defined GL_UINT64_T 627 # define UINTMAX_C(x) UINT64_C(x) 628 # else 629 # define UINTMAX_C(x) x##UL 630 # endif 631 #endif 632 633 #endif /* _@GUARD_PREFIX@_STDINT_H */ 634 #endif /* !(defined __ANDROID__ && ...) */ 635 #endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ 636