glibc (2.38)

(root)/
include/
stdint.h
       1  /* Copyright (C) 1997-2023 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 */