Clang Project

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