]>
git.saurik.com Git - apple/libc.git/blob - include/inttypes.h
1beb2c0d9b94bcecf65418b8c760160597722b52
2 * Copyright (c) 2000, 2001, 2002, 2003, 2004 Apple Computer, Inc.
5 * @APPLE_LICENSE_HEADER_START@
7 * The contents of this file constitute Original Code as defined in and
8 * are subject to the Apple Public Source License Version 1.1 (the
9 * "License"). You may not use this file except in compliance with the
10 * License. Please obtain a copy of the License at
11 * http://www.apple.com/publicsource and read it before using this file.
13 * This Original Code and all software distributed under the License are
14 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
18 * License for the specific language governing rights and limitations
21 * @APPLE_LICENSE_HEADER_END@
25 * <inttypes.h> -- Standard C header, defined in ISO/IEC 9899:1999
26 * (aka "C99"), section 7.8. This defines format string conversion
27 * specifiers suitable for use within arguments to fprintf and fscanf
31 #if !defined(_INTTYPES_H_)
34 # undef __PRI_8_LENGTH_MODIFIER__
35 # undef __PRI_64_LENGTH_MODIFIER__
36 # undef __SCN_64_LENGTH_MODIFIER__
38 # if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0 > 1020
39 # define __PRI_8_LENGTH_MODIFIER__ "hh"
40 # define __PRI_64_LENGTH_MODIFIER__ "ll"
41 # define __SCN_64_LENGTH_MODIFIER__ "ll"
43 /* These could be "hh", "ll", and "ll" respectively, but that doesn't work on
44 10.2, and these do. Note that there's no way to use scanf to scan a
45 decimal into a 'char' argument on 10.2, so "hh" is used unconditionally
46 and programs that use it won't work on Jaguar. */
47 # define __PRI_8_LENGTH_MODIFIER__ "" /* none */
48 # define __PRI_64_LENGTH_MODIFIER__ "q"
49 # define __SCN_64_LENGTH_MODIFIER__ "q"
51 # define __PRI_MAX_LENGTH_MODIFIER__ "j"
52 # define __SCN_MAX_LENGTH_MODIFIER__ "j"
54 # define PRId8 __PRI_8_LENGTH_MODIFIER__ "d"
55 # define PRIi8 __PRI_8_LENGTH_MODIFIER__ "i"
56 # define PRIo8 __PRI_8_LENGTH_MODIFIER__ "o"
57 # define PRIu8 __PRI_8_LENGTH_MODIFIER__ "u"
58 # define PRIx8 __PRI_8_LENGTH_MODIFIER__ "x"
59 # define PRIX8 __PRI_8_LENGTH_MODIFIER__ "X"
75 # define PRId64 __PRI_64_LENGTH_MODIFIER__ "d"
76 # define PRIi64 __PRI_64_LENGTH_MODIFIER__ "i"
77 # define PRIo64 __PRI_64_LENGTH_MODIFIER__ "o"
78 # define PRIu64 __PRI_64_LENGTH_MODIFIER__ "u"
79 # define PRIx64 __PRI_64_LENGTH_MODIFIER__ "x"
80 # define PRIX64 __PRI_64_LENGTH_MODIFIER__ "X"
82 # define PRIdLEAST8 PRId8
83 # define PRIiLEAST8 PRIi8
84 # define PRIoLEAST8 PRIo8
85 # define PRIuLEAST8 PRIu8
86 # define PRIxLEAST8 PRIx8
87 # define PRIXLEAST8 PRIX8
89 # define PRIdLEAST16 PRId16
90 # define PRIiLEAST16 PRIi16
91 # define PRIoLEAST16 PRIo16
92 # define PRIuLEAST16 PRIu16
93 # define PRIxLEAST16 PRIx16
94 # define PRIXLEAST16 PRIX16
96 # define PRIdLEAST32 PRId32
97 # define PRIiLEAST32 PRIi32
98 # define PRIoLEAST32 PRIo32
99 # define PRIuLEAST32 PRIu32
100 # define PRIxLEAST32 PRIx32
101 # define PRIXLEAST32 PRIX32
103 # define PRIdLEAST64 PRId64
104 # define PRIiLEAST64 PRIi64
105 # define PRIoLEAST64 PRIo64
106 # define PRIuLEAST64 PRIu64
107 # define PRIxLEAST64 PRIx64
108 # define PRIXLEAST64 PRIX64
110 # define PRIdFAST8 PRId8
111 # define PRIiFAST8 PRIi8
112 # define PRIoFAST8 PRIo8
113 # define PRIuFAST8 PRIu8
114 # define PRIxFAST8 PRIx8
115 # define PRIXFAST8 PRIX8
117 # define PRIdFAST16 PRId16
118 # define PRIiFAST16 PRIi16
119 # define PRIoFAST16 PRIo16
120 # define PRIuFAST16 PRIu16
121 # define PRIxFAST16 PRIx16
122 # define PRIXFAST16 PRIX16
124 # define PRIdFAST32 PRId32
125 # define PRIiFAST32 PRIi32
126 # define PRIoFAST32 PRIo32
127 # define PRIuFAST32 PRIu32
128 # define PRIxFAST32 PRIx32
129 # define PRIXFAST32 PRIX32
131 # define PRIdFAST64 PRId64
132 # define PRIiFAST64 PRIi64
133 # define PRIoFAST64 PRIo64
134 # define PRIuFAST64 PRIu64
135 # define PRIxFAST64 PRIx64
136 # define PRIXFAST64 PRIX64
138 /* int32_t is 'int', but intptr_t is 'long'. */
139 # define PRIdPTR "ld"
140 # define PRIiPTR "li"
141 # define PRIoPTR "lo"
142 # define PRIuPTR "lu"
143 # define PRIxPTR "lx"
144 # define PRIXPTR "lX"
146 # define PRIdMAX __PRI_MAX_LENGTH_MODIFIER__ "d"
147 # define PRIiMAX __PRI_MAX_LENGTH_MODIFIER__ "i"
148 # define PRIoMAX __PRI_MAX_LENGTH_MODIFIER__ "o"
149 # define PRIuMAX __PRI_MAX_LENGTH_MODIFIER__ "u"
150 # define PRIxMAX __PRI_MAX_LENGTH_MODIFIER__ "x"
151 # define PRIXMAX __PRI_MAX_LENGTH_MODIFIER__ "X"
153 # if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0 > 1020
154 # define SCNd8 __PRI_8_LENGTH_MODIFIER__ "d"
155 # define SCNi8 __PRI_8_LENGTH_MODIFIER__ "i"
156 # define SCNo8 __PRI_8_LENGTH_MODIFIER__ "o"
157 # define SCNu8 __PRI_8_LENGTH_MODIFIER__ "u"
158 # define SCNx8 __PRI_8_LENGTH_MODIFIER__ "x"
179 # define SCNd64 __SCN_64_LENGTH_MODIFIER__ "d"
180 # define SCNi64 __SCN_64_LENGTH_MODIFIER__ "i"
181 # define SCNo64 __SCN_64_LENGTH_MODIFIER__ "o"
182 # define SCNu64 __SCN_64_LENGTH_MODIFIER__ "u"
183 # define SCNx64 __SCN_64_LENGTH_MODIFIER__ "x"
185 # define SCNdLEAST8 SCNd8
186 # define SCNiLEAST8 SCNi8
187 # define SCNoLEAST8 SCNo8
188 # define SCNuLEAST8 SCNu8
189 # define SCNxLEAST8 SCNx8
191 # define SCNdLEAST16 SCNd16
192 # define SCNiLEAST16 SCNi16
193 # define SCNoLEAST16 SCNo16
194 # define SCNuLEAST16 SCNu16
195 # define SCNxLEAST16 SCNx16
197 # define SCNdLEAST32 SCNd32
198 # define SCNiLEAST32 SCNi32
199 # define SCNoLEAST32 SCNo32
200 # define SCNuLEAST32 SCNu32
201 # define SCNxLEAST32 SCNx32
203 # define SCNdLEAST64 SCNd64
204 # define SCNiLEAST64 SCNi64
205 # define SCNoLEAST64 SCNo64
206 # define SCNuLEAST64 SCNu64
207 # define SCNxLEAST64 SCNx64
209 # define SCNdFAST8 SCNd8
210 # define SCNiFAST8 SCNi8
211 # define SCNoFAST8 SCNo8
212 # define SCNuFAST8 SCNu8
213 # define SCNxFAST8 SCNx8
215 # define SCNdFAST16 SCNd16
216 # define SCNiFAST16 SCNi16
217 # define SCNoFAST16 SCNo16
218 # define SCNuFAST16 SCNu16
219 # define SCNxFAST16 SCNx16
221 # define SCNdFAST32 SCNd32
222 # define SCNiFAST32 SCNi32
223 # define SCNoFAST32 SCNo32
224 # define SCNuFAST32 SCNu32
225 # define SCNxFAST32 SCNx32
227 # define SCNdFAST64 SCNd64
228 # define SCNiFAST64 SCNi64
229 # define SCNoFAST64 SCNo64
230 # define SCNuFAST64 SCNu64
231 # define SCNxFAST64 SCNx64
233 # define SCNdPTR "ld"
234 # define SCNiPTR "li"
235 # define SCNoPTR "lo"
236 # define SCNuPTR "lu"
237 # define SCNxPTR "lx"
239 # define SCNdMAX __SCN_MAX_LENGTH_MODIFIER__ "d"
240 # define SCNiMAX __SCN_MAX_LENGTH_MODIFIER__ "i"
241 # define SCNoMAX __SCN_MAX_LENGTH_MODIFIER__ "o"
242 # define SCNuMAX __SCN_MAX_LENGTH_MODIFIER__ "u"
243 # define SCNxMAX __SCN_MAX_LENGTH_MODIFIER__ "x"
245 #include <sys/cdefs.h> /* For __BEGIN_DECLS and __END_DECLS */
246 #include <_types.h> /* For __darwin_wchar_t */
249 #if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L)
250 /* Translator is not ISO/IEC 9899:1999-compliant. */
251 # if !defined(restrict)
253 # define __RESTRICT_KEYWORD_DEFINED__
260 extern intmax_t imaxabs(intmax_t j
);
268 extern imaxdiv_t
imaxdiv(intmax_t numer
, intmax_t denom
);
271 extern intmax_t strtoimax(const char * restrict nptr
, char ** restrict endptr
, int base
);
272 extern uintmax_t strtoumax(const char * restrict nptr
, char ** restrict endptr
, int base
);
274 #ifndef __cplusplus /* wchar_t is a built-in type in C++ */
277 typedef __darwin_wchar_t
wchar_t;
278 # endif /* _WCHAR_T */
279 #endif /* __cplusplus */
282 extern intmax_t wcstoimax(const wchar_t * restrict nptr
, wchar_t ** restrict endptr
, int base
);
283 extern uintmax_t wcstoumax(const wchar_t * restrict nptr
, wchar_t ** restrict endptr
, int base
);
285 /* Poison the following routines if -fshort-wchar is set */
286 #if !defined(__cplusplus) && defined(__WCHAR_MAX__) && __WCHAR_MAX__ <= 0xffffU
287 #pragma GCC poison wcstoimax wcstoumax
292 #ifdef _USE_EXTENDED_LOCALES_
293 #include <xlocale/_inttypes.h>
294 #endif /* _USE_EXTENDED_LOCALES_ */
297 No need to #undef the __*_{8,64}_LENGTH_MODIFIER__ macros;
298 in fact, you can't #undef them, because later uses of any of
299 their dependents will *not* then do the intended substitution.
300 Expansion of a #define like this one:
304 uses the cpp value of IDENT at the location where x is *expanded*,
305 not where it is #defined.
308 #if defined(__RESTRICT_KEYWORD_DEFINED__)
310 # undef __RESTRICT_KEYWORD_DEFINED__
313 #endif /* !_INTTYPES_H_ */