Wire Sysio Wire Sysion 1.0.0
Loading...
Searching...
No Matches
inttypes.h
Go to the documentation of this file.
1// ISO C9x compliant inttypes.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_INTTYPES_H_ // [
42#define _MSC_INTTYPES_H_
43
44#if _MSC_VER > 1000
45#pragma once
46#endif
47
48#include "stdint.h"
49
50// miloyip: VC supports inttypes.h since VC2013
51#if _MSC_VER >= 1800
52#include <inttypes.h>
53#else
54
55// 7.8 Format conversion of integer types
56
57typedef struct {
60} imaxdiv_t;
61
62// 7.8.1 Macros for format specifiers
63
64#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198
65
66// The fprintf macros for signed integers are:
67#define PRId8 "d"
68#define PRIi8 "i"
69#define PRIdLEAST8 "d"
70#define PRIiLEAST8 "i"
71#define PRIdFAST8 "d"
72#define PRIiFAST8 "i"
73
74#define PRId16 "hd"
75#define PRIi16 "hi"
76#define PRIdLEAST16 "hd"
77#define PRIiLEAST16 "hi"
78#define PRIdFAST16 "hd"
79#define PRIiFAST16 "hi"
80
81#define PRId32 "I32d"
82#define PRIi32 "I32i"
83#define PRIdLEAST32 "I32d"
84#define PRIiLEAST32 "I32i"
85#define PRIdFAST32 "I32d"
86#define PRIiFAST32 "I32i"
87
88#define PRId64 "I64d"
89#define PRIi64 "I64i"
90#define PRIdLEAST64 "I64d"
91#define PRIiLEAST64 "I64i"
92#define PRIdFAST64 "I64d"
93#define PRIiFAST64 "I64i"
94
95#define PRIdMAX "I64d"
96#define PRIiMAX "I64i"
97
98#define PRIdPTR "Id"
99#define PRIiPTR "Ii"
100
101// The fprintf macros for unsigned integers are:
102#define PRIo8 "o"
103#define PRIu8 "u"
104#define PRIx8 "x"
105#define PRIX8 "X"
106#define PRIoLEAST8 "o"
107#define PRIuLEAST8 "u"
108#define PRIxLEAST8 "x"
109#define PRIXLEAST8 "X"
110#define PRIoFAST8 "o"
111#define PRIuFAST8 "u"
112#define PRIxFAST8 "x"
113#define PRIXFAST8 "X"
114
115#define PRIo16 "ho"
116#define PRIu16 "hu"
117#define PRIx16 "hx"
118#define PRIX16 "hX"
119#define PRIoLEAST16 "ho"
120#define PRIuLEAST16 "hu"
121#define PRIxLEAST16 "hx"
122#define PRIXLEAST16 "hX"
123#define PRIoFAST16 "ho"
124#define PRIuFAST16 "hu"
125#define PRIxFAST16 "hx"
126#define PRIXFAST16 "hX"
127
128#define PRIo32 "I32o"
129#define PRIu32 "I32u"
130#define PRIx32 "I32x"
131#define PRIX32 "I32X"
132#define PRIoLEAST32 "I32o"
133#define PRIuLEAST32 "I32u"
134#define PRIxLEAST32 "I32x"
135#define PRIXLEAST32 "I32X"
136#define PRIoFAST32 "I32o"
137#define PRIuFAST32 "I32u"
138#define PRIxFAST32 "I32x"
139#define PRIXFAST32 "I32X"
140
141#define PRIo64 "I64o"
142#define PRIu64 "I64u"
143#define PRIx64 "I64x"
144#define PRIX64 "I64X"
145#define PRIoLEAST64 "I64o"
146#define PRIuLEAST64 "I64u"
147#define PRIxLEAST64 "I64x"
148#define PRIXLEAST64 "I64X"
149#define PRIoFAST64 "I64o"
150#define PRIuFAST64 "I64u"
151#define PRIxFAST64 "I64x"
152#define PRIXFAST64 "I64X"
153
154#define PRIoMAX "I64o"
155#define PRIuMAX "I64u"
156#define PRIxMAX "I64x"
157#define PRIXMAX "I64X"
158
159#define PRIoPTR "Io"
160#define PRIuPTR "Iu"
161#define PRIxPTR "Ix"
162#define PRIXPTR "IX"
163
164// The fscanf macros for signed integers are:
165#define SCNd8 "d"
166#define SCNi8 "i"
167#define SCNdLEAST8 "d"
168#define SCNiLEAST8 "i"
169#define SCNdFAST8 "d"
170#define SCNiFAST8 "i"
171
172#define SCNd16 "hd"
173#define SCNi16 "hi"
174#define SCNdLEAST16 "hd"
175#define SCNiLEAST16 "hi"
176#define SCNdFAST16 "hd"
177#define SCNiFAST16 "hi"
178
179#define SCNd32 "ld"
180#define SCNi32 "li"
181#define SCNdLEAST32 "ld"
182#define SCNiLEAST32 "li"
183#define SCNdFAST32 "ld"
184#define SCNiFAST32 "li"
185
186#define SCNd64 "I64d"
187#define SCNi64 "I64i"
188#define SCNdLEAST64 "I64d"
189#define SCNiLEAST64 "I64i"
190#define SCNdFAST64 "I64d"
191#define SCNiFAST64 "I64i"
192
193#define SCNdMAX "I64d"
194#define SCNiMAX "I64i"
195
196#ifdef _WIN64 // [
197# define SCNdPTR "I64d"
198# define SCNiPTR "I64i"
199#else // _WIN64 ][
200# define SCNdPTR "ld"
201# define SCNiPTR "li"
202#endif // _WIN64 ]
203
204// The fscanf macros for unsigned integers are:
205#define SCNo8 "o"
206#define SCNu8 "u"
207#define SCNx8 "x"
208#define SCNX8 "X"
209#define SCNoLEAST8 "o"
210#define SCNuLEAST8 "u"
211#define SCNxLEAST8 "x"
212#define SCNXLEAST8 "X"
213#define SCNoFAST8 "o"
214#define SCNuFAST8 "u"
215#define SCNxFAST8 "x"
216#define SCNXFAST8 "X"
217
218#define SCNo16 "ho"
219#define SCNu16 "hu"
220#define SCNx16 "hx"
221#define SCNX16 "hX"
222#define SCNoLEAST16 "ho"
223#define SCNuLEAST16 "hu"
224#define SCNxLEAST16 "hx"
225#define SCNXLEAST16 "hX"
226#define SCNoFAST16 "ho"
227#define SCNuFAST16 "hu"
228#define SCNxFAST16 "hx"
229#define SCNXFAST16 "hX"
230
231#define SCNo32 "lo"
232#define SCNu32 "lu"
233#define SCNx32 "lx"
234#define SCNX32 "lX"
235#define SCNoLEAST32 "lo"
236#define SCNuLEAST32 "lu"
237#define SCNxLEAST32 "lx"
238#define SCNXLEAST32 "lX"
239#define SCNoFAST32 "lo"
240#define SCNuFAST32 "lu"
241#define SCNxFAST32 "lx"
242#define SCNXFAST32 "lX"
243
244#define SCNo64 "I64o"
245#define SCNu64 "I64u"
246#define SCNx64 "I64x"
247#define SCNX64 "I64X"
248#define SCNoLEAST64 "I64o"
249#define SCNuLEAST64 "I64u"
250#define SCNxLEAST64 "I64x"
251#define SCNXLEAST64 "I64X"
252#define SCNoFAST64 "I64o"
253#define SCNuFAST64 "I64u"
254#define SCNxFAST64 "I64x"
255#define SCNXFAST64 "I64X"
256
257#define SCNoMAX "I64o"
258#define SCNuMAX "I64u"
259#define SCNxMAX "I64x"
260#define SCNXMAX "I64X"
261
262#ifdef _WIN64 // [
263# define SCNoPTR "I64o"
264# define SCNuPTR "I64u"
265# define SCNxPTR "I64x"
266# define SCNXPTR "I64X"
267#else // _WIN64 ][
268# define SCNoPTR "lo"
269# define SCNuPTR "lu"
270# define SCNxPTR "lx"
271# define SCNXPTR "lX"
272#endif // _WIN64 ]
273
274#endif // __STDC_FORMAT_MACROS ]
275
276// 7.8.2 Functions for greatest-width integer types
277
278// 7.8.2.1 The imaxabs function
279#define imaxabs _abs64
280
281// 7.8.2.2 The imaxdiv function
282
283// This is modified version of div() function from Microsoft's div.c found
284// in %MSVC.NET%\crt\src\div.c
285#ifdef STATIC_IMAXDIV // [
286static
287#else // STATIC_IMAXDIV ][
288_inline
289#endif // STATIC_IMAXDIV ]
290imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom)
291{
292 imaxdiv_t result;
293
294 result.quot = numer / denom;
295 result.rem = numer % denom;
296
297 if (numer < 0 && result.rem > 0) {
298 // did division wrong; must fix up
299 ++result.quot;
300 result.rem -= denom;
301 }
302
303 return result;
304}
305
306// 7.8.2.3 The strtoimax and strtoumax functions
307#define strtoimax _strtoi64
308#define strtoumax _strtoui64
309
310// 7.8.2.4 The wcstoimax and wcstoumax functions
311#define wcstoimax _wcstoi64
312#define wcstoumax _wcstoui64
313
314#endif // _MSC_VER >= 1800
315
316#endif // _MSC_INTTYPES_H_ ]
_inline imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom)
Definition inttypes.h:290
int64_t intmax_t
Definition stdint.h:169
intmax_t rem
Definition inttypes.h:59
intmax_t quot
Definition inttypes.h:58