stdint.h Source File

stdint.h Source File#

Composable Kernel: stdint.h Source File
stdint.h
Go to the documentation of this file.
1// ISO C9x compliant stdint.h for Microsoft Visual Studio
2// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
3//
4// Copyright (c) 2006-2013 Alexander Chemeris
5//
6// Redistribution and use in source and binary forms, with or without
7// modification, are permitted provided that the following conditions are met:
8//
9// 1. Redistributions of source code must retain the above copyright notice,
10// this list of conditions and the following disclaimer.
11//
12// 2. Redistributions in binary form must reproduce the above copyright
13// notice, this list of conditions and the following disclaimer in the
14// documentation and/or other materials provided with the distribution.
15//
16// 3. Neither the name of the product nor the names of its contributors may
17// be used to endorse or promote products derived from this software
18// without specific prior written permission.
19//
20// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
21// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
22// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
23// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30//
32
33// The above software in this distribution may have been modified by
34// THL A29 Limited ("Tencent Modifications").
35// All Tencent Modifications are Copyright (C) 2015 THL A29 Limited.
36
37#ifndef _MSC_VER // [
38#error "Use this header only with Microsoft Visual C++ compilers!"
39#endif // _MSC_VER ]
40
41#ifndef _MSC_STDINT_H_ // [
42#define _MSC_STDINT_H_
43
44#if _MSC_VER > 1000
45#pragma once
46#endif
47
48// miloyip: Originally Visual Studio 2010 uses its own stdint.h. However it generates warning with
49// INT64_C(), so change to use this file for vs2010.
50#if _MSC_VER >= 1600 // [
51#include <stdint.h>
52
53#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260
54
55#undef INT8_C
56#undef INT16_C
57#undef INT32_C
58#undef INT64_C
59#undef UINT8_C
60#undef UINT16_C
61#undef UINT32_C
62#undef UINT64_C
63
64// 7.18.4.1 Macros for minimum-width integer constants
65
66#define INT8_C(val) val##i8
67#define INT16_C(val) val##i16
68#define INT32_C(val) val##i32
69#define INT64_C(val) val##i64
70
71#define UINT8_C(val) val##ui8
72#define UINT16_C(val) val##ui16
73#define UINT32_C(val) val##ui32
74#define UINT64_C(val) val##ui64
75
76// 7.18.4.2 Macros for greatest-width integer constants
77// These #ifndef's are needed to prevent collisions with <boost/cstdint.hpp>.
78// Check out Issue 9 for the details.
79#ifndef INTMAX_C // [
80#define INTMAX_C INT64_C
81#endif // INTMAX_C ]
82#ifndef UINTMAX_C // [
83#define UINTMAX_C UINT64_C
84#endif // UINTMAX_C ]
85
86#endif // __STDC_CONSTANT_MACROS ]
87
88#else // ] _MSC_VER >= 1700 [
89
90#include <limits.h>
91
92// For Visual Studio 6 in C++ mode and for many Visual Studio versions when
93// compiling for ARM we have to wrap <wchar.h> include with 'extern "C++" {}'
94// or compiler would give many errors like this:
95// error C2733: second C linkage of overloaded function 'wmemchr' not allowed
96#if defined(__cplusplus) && !defined(_M_ARM)
97extern "C" {
98#endif
99#include <wchar.h>
100#if defined(__cplusplus) && !defined(_M_ARM)
101}
102#endif
103
104// Define _W64 macros to mark types changing their size, like intptr_t.
105#ifndef _W64
106#if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
107#define _W64 __w64
108#else
109#define _W64
110#endif
111#endif
112
113// 7.18.1 Integer types
114
115// 7.18.1.1 Exact-width integer types
116
117// Visual Studio 6 and Embedded Visual C++ 4 doesn't
118// realize that, e.g. char has the same size as __int8
119// so we give up on __intX for them.
120#if(_MSC_VER < 1300)
121typedef signed char int8_t;
122typedef signed short int16_t;
123typedef signed int int32_t;
124typedef unsigned char uint8_t;
125typedef unsigned short uint16_t;
126typedef unsigned int uint32_t;
127#else
128typedef signed __int8 int8_t;
129typedef signed __int16 int16_t;
130typedef signed __int32 int32_t;
131typedef unsigned __int8 uint8_t;
132typedef unsigned __int16 uint16_t;
133typedef unsigned __int32 uint32_t;
134#endif
135typedef signed __int64 int64_t;
136typedef unsigned __int64 uint64_t;
137
138// 7.18.1.2 Minimum-width integer types
147
148// 7.18.1.3 Fastest minimum-width integer types
157
158// 7.18.1.4 Integer types capable of holding object pointers
159#ifdef _WIN64 // [
160typedef signed __int64 intptr_t;
161typedef unsigned __int64 uintptr_t;
162#else // _WIN64 ][
163typedef _W64 signed int intptr_t;
164typedef _W64 unsigned int uintptr_t;
165#endif // _WIN64 ]
166
167// 7.18.1.5 Greatest-width integer types
170
171// 7.18.2 Limits of specified-width integer types
172
173#if !defined(__cplusplus) || \
174 defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259
175
176// 7.18.2.1 Limits of exact-width integer types
177#define INT8_MIN ((int8_t)_I8_MIN)
178#define INT8_MAX _I8_MAX
179#define INT16_MIN ((int16_t)_I16_MIN)
180#define INT16_MAX _I16_MAX
181#define INT32_MIN ((int32_t)_I32_MIN)
182#define INT32_MAX _I32_MAX
183#define INT64_MIN ((int64_t)_I64_MIN)
184#define INT64_MAX _I64_MAX
185#define UINT8_MAX _UI8_MAX
186#define UINT16_MAX _UI16_MAX
187#define UINT32_MAX _UI32_MAX
188#define UINT64_MAX _UI64_MAX
189
190// 7.18.2.2 Limits of minimum-width integer types
191#define INT_LEAST8_MIN INT8_MIN
192#define INT_LEAST8_MAX INT8_MAX
193#define INT_LEAST16_MIN INT16_MIN
194#define INT_LEAST16_MAX INT16_MAX
195#define INT_LEAST32_MIN INT32_MIN
196#define INT_LEAST32_MAX INT32_MAX
197#define INT_LEAST64_MIN INT64_MIN
198#define INT_LEAST64_MAX INT64_MAX
199#define UINT_LEAST8_MAX UINT8_MAX
200#define UINT_LEAST16_MAX UINT16_MAX
201#define UINT_LEAST32_MAX UINT32_MAX
202#define UINT_LEAST64_MAX UINT64_MAX
203
204// 7.18.2.3 Limits of fastest minimum-width integer types
205#define INT_FAST8_MIN INT8_MIN
206#define INT_FAST8_MAX INT8_MAX
207#define INT_FAST16_MIN INT16_MIN
208#define INT_FAST16_MAX INT16_MAX
209#define INT_FAST32_MIN INT32_MIN
210#define INT_FAST32_MAX INT32_MAX
211#define INT_FAST64_MIN INT64_MIN
212#define INT_FAST64_MAX INT64_MAX
213#define UINT_FAST8_MAX UINT8_MAX
214#define UINT_FAST16_MAX UINT16_MAX
215#define UINT_FAST32_MAX UINT32_MAX
216#define UINT_FAST64_MAX UINT64_MAX
217
218// 7.18.2.4 Limits of integer types capable of holding object pointers
219#ifdef _WIN64 // [
220#define INTPTR_MIN INT64_MIN
221#define INTPTR_MAX INT64_MAX
222#define UINTPTR_MAX UINT64_MAX
223#else // _WIN64 ][
224#define INTPTR_MIN INT32_MIN
225#define INTPTR_MAX INT32_MAX
226#define UINTPTR_MAX UINT32_MAX
227#endif // _WIN64 ]
228
229// 7.18.2.5 Limits of greatest-width integer types
230#define INTMAX_MIN INT64_MIN
231#define INTMAX_MAX INT64_MAX
232#define UINTMAX_MAX UINT64_MAX
233
234// 7.18.3 Limits of other integer types
235
236#ifdef _WIN64 // [
237#define PTRDIFF_MIN _I64_MIN
238#define PTRDIFF_MAX _I64_MAX
239#else // _WIN64 ][
240#define PTRDIFF_MIN _I32_MIN
241#define PTRDIFF_MAX _I32_MAX
242#endif // _WIN64 ]
243
244#define SIG_ATOMIC_MIN INT_MIN
245#define SIG_ATOMIC_MAX INT_MAX
246
247#ifndef SIZE_MAX // [
248#ifdef _WIN64 // [
249#define SIZE_MAX _UI64_MAX
250#else // _WIN64 ][
251#define SIZE_MAX _UI32_MAX
252#endif // _WIN64 ]
253#endif // SIZE_MAX ]
254
255// WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
256#ifndef WCHAR_MIN // [
257#define WCHAR_MIN 0
258#endif // WCHAR_MIN ]
259#ifndef WCHAR_MAX // [
260#define WCHAR_MAX _UI16_MAX
261#endif // WCHAR_MAX ]
262
263#define WINT_MIN 0
264#define WINT_MAX _UI16_MAX
265
266#endif // __STDC_LIMIT_MACROS ]
267
268// 7.18.4 Limits of other integer types
269
270#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260
271
272// 7.18.4.1 Macros for minimum-width integer constants
273
274#define INT8_C(val) val##i8
275#define INT16_C(val) val##i16
276#define INT32_C(val) val##i32
277#define INT64_C(val) val##i64
278
279#define UINT8_C(val) val##ui8
280#define UINT16_C(val) val##ui16
281#define UINT32_C(val) val##ui32
282#define UINT64_C(val) val##ui64
283
284// 7.18.4.2 Macros for greatest-width integer constants
285// These #ifndef's are needed to prevent collisions with <boost/cstdint.hpp>.
286// Check out Issue 9 for the details.
287#ifndef INTMAX_C // [
288#define INTMAX_C INT64_C
289#endif // INTMAX_C ]
290#ifndef UINTMAX_C // [
291#define UINTMAX_C UINT64_C
292#endif // UINTMAX_C ]
293
294#endif // __STDC_CONSTANT_MACROS ]
295
296#endif // _MSC_VER >= 1600 ]
297
298#endif // _MSC_STDINT_H_ ]
int64_t intmax_t
Definition stdint.h:168
int16_t int_least16_t
Definition stdint.h:140
int64_t int_least64_t
Definition stdint.h:142
int32_t int_least32_t
Definition stdint.h:141
signed short int16_t
Definition stdint.h:122
unsigned short uint16_t
Definition stdint.h:125
uint64_t uintmax_t
Definition stdint.h:169
_W64 unsigned int uintptr_t
Definition stdint.h:164
#define _W64
Definition stdint.h:109
signed __int64 int64_t
Definition stdint.h:135
unsigned int uint32_t
Definition stdint.h:126
uint16_t uint_least16_t
Definition stdint.h:144
uint16_t uint_fast16_t
Definition stdint.h:154
uint64_t uint_fast64_t
Definition stdint.h:156
int8_t int_fast8_t
Definition stdint.h:149
uint32_t uint_fast32_t
Definition stdint.h:155
int32_t int_fast32_t
Definition stdint.h:151
int16_t int_fast16_t
Definition stdint.h:150
int8_t int_least8_t
Definition stdint.h:139
signed int int32_t
Definition stdint.h:123
uint64_t uint_least64_t
Definition stdint.h:146
unsigned char uint8_t
Definition stdint.h:124
_W64 signed int intptr_t
Definition stdint.h:163
uint32_t uint_least32_t
Definition stdint.h:145
uint8_t uint_least8_t
Definition stdint.h:143
uint8_t uint_fast8_t
Definition stdint.h:153
unsigned __int64 uint64_t
Definition stdint.h:136
signed char int8_t
Definition stdint.h:121
int64_t int_fast64_t
Definition stdint.h:152