Main Page User Manual Library Reference FAQ Alphabetical Index Example Projects

stdint.h
Go to the documentation of this file.
1 /* Copyright (c) 2002,2004,2005 Marek Michalkiewicz
2  Copyright (c) 2005, Carlos Lamas
3  Copyright (c) 2005,2007 Joerg Wunsch
4  All rights reserved.
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  * Redistributions of source code must retain the above copyright
10  notice, this list of conditions and the following disclaimer.
11 
12  * Redistributions in binary form must reproduce the above copyright
13  notice, this list of conditions and the following disclaimer in
14  the documentation and/or other materials provided with the
15  distribution.
16 
17  * Neither the name of the copyright holders nor the names of
18  contributors may be used to endorse or promote products derived
19  from this software without specific prior written permission.
20 
21  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31  POSSIBILITY OF SUCH DAMAGE. */
32 
33 /* $Id: stdint.h 2261 2011-12-09 07:05:46Z joerg_wunsch $ */
34 
35 /*
36  * ISO/IEC 9899:1999 7.18 Integer types <stdint.h>
37  */
38 
39 #ifndef __STDINT_H_
40 #define __STDINT_H_
41 
42 /** \file */
43 /** \defgroup avr_stdint <stdint.h>: Standard Integer Types
44  \code #include <stdint.h> \endcode
45 
46  Use [u]intN_t if you need exactly N bits.
47 
48  Since these typedefs are mandated by the C99 standard, they are preferred
49  over rolling your own typedefs. */
50 
51 /*
52  * __USING_MINT8 is defined to 1 if the -mint8 option is in effect.
53  */
54 #if __INT_MAX__ == 127
55 # define __USING_MINT8 1
56 #else
57 # define __USING_MINT8 0
58 #endif
59 
60 /* Integer types */
61 
62 #if defined(__DOXYGEN__)
63 
64 /* doxygen gets confused by the __attribute__ stuff */
65 
66 /** \name Exact-width integer types
67  Integer types having exactly the specified width */
68 
69 /*@{*/
70 
71 /** \ingroup avr_stdint
72  8-bit signed type. */
73 
74 typedef signed char int8_t;
75 
76 /** \ingroup avr_stdint
77  8-bit unsigned type. */
78 
79 typedef unsigned char uint8_t;
80 
81 /** \ingroup avr_stdint
82  16-bit signed type. */
83 
84 typedef signed int int16_t;
85 
86 /** \ingroup avr_stdint
87  16-bit unsigned type. */
88 
89 typedef unsigned int uint16_t;
90 
91 /** \ingroup avr_stdint
92  32-bit signed type. */
93 
94 typedef signed long int int32_t;
95 
96 /** \ingroup avr_stdint
97  32-bit unsigned type. */
98 
99 typedef unsigned long int uint32_t;
100 
101 /** \ingroup avr_stdint
102  64-bit signed type.
103  \note This type is not available when the compiler
104  option -mint8 is in effect. */
105 
106 typedef signed long long int int64_t;
107 
108 /** \ingroup avr_stdint
109  64-bit unsigned type.
110  \note This type is not available when the compiler
111  option -mint8 is in effect. */
112 
113 typedef unsigned long long int uint64_t;
114 
115 /*@}*/
116 
117 #else /* !defined(__DOXYGEN__) */
118 
119 /* actual implementation goes here */
120 
121 typedef signed int int8_t __attribute__((__mode__(__QI__)));
122 typedef unsigned int uint8_t __attribute__((__mode__(__QI__)));
123 typedef signed int int16_t __attribute__ ((__mode__ (__HI__)));
124 typedef unsigned int uint16_t __attribute__ ((__mode__ (__HI__)));
125 typedef signed int int32_t __attribute__ ((__mode__ (__SI__)));
126 typedef unsigned int uint32_t __attribute__ ((__mode__ (__SI__)));
127 #if !__USING_MINT8
128 typedef signed int int64_t __attribute__((__mode__(__DI__)));
129 typedef unsigned int uint64_t __attribute__((__mode__(__DI__)));
130 #endif
131 
132 #endif /* defined(__DOXYGEN__) */
133 
134 /** \name Integer types capable of holding object pointers
135  These allow you to declare variables of the same size as a pointer. */
136 
137 /*@{*/
138 
139 /** \ingroup avr_stdint
140  Signed pointer compatible type. */
141 
143 
144 /** \ingroup avr_stdint
145  Unsigned pointer compatible type. */
146 
148 
149 /*@}*/
150 
151 /** \name Minimum-width integer types
152  Integer types having at least the specified width */
153 
154 /*@{*/
155 
156 /** \ingroup avr_stdint
157  signed int with at least 8 bits. */
158 
160 
161 /** \ingroup avr_stdint
162  unsigned int with at least 8 bits. */
163 
165 
166 /** \ingroup avr_stdint
167  signed int with at least 16 bits. */
168 
170 
171 /** \ingroup avr_stdint
172  unsigned int with at least 16 bits. */
173 
175 
176 /** \ingroup avr_stdint
177  signed int with at least 32 bits. */
178 
180 
181 /** \ingroup avr_stdint
182  unsigned int with at least 32 bits. */
183 
185 
186 #if !__USING_MINT8 || defined(__DOXYGEN__)
187 /** \ingroup avr_stdint
188  signed int with at least 64 bits.
189  \note This type is not available when the compiler
190  option -mint8 is in effect. */
191 
193 
194 /** \ingroup avr_stdint
195  unsigned int with at least 64 bits.
196  \note This type is not available when the compiler
197  option -mint8 is in effect. */
198 
200 #endif
201 
202 /*@}*/
203 
204 
205 /** \name Fastest minimum-width integer types
206  Integer types being usually fastest having at least the specified width */
207 
208 /*@{*/
209 
210 /** \ingroup avr_stdint
211  fastest signed int with at least 8 bits. */
212 
214 
215 /** \ingroup avr_stdint
216  fastest unsigned int with at least 8 bits. */
217 
219 
220 /** \ingroup avr_stdint
221  fastest signed int with at least 16 bits. */
222 
224 
225 /** \ingroup avr_stdint
226  fastest unsigned int with at least 16 bits. */
227 
229 
230 /** \ingroup avr_stdint
231  fastest signed int with at least 32 bits. */
232 
234 
235 /** \ingroup avr_stdint
236  fastest unsigned int with at least 32 bits. */
237 
239 
240 #if !__USING_MINT8 || defined(__DOXYGEN__)
241 /** \ingroup avr_stdint
242  fastest signed int with at least 64 bits.
243  \note This type is not available when the compiler
244  option -mint8 is in effect. */
245 
247 
248 /** \ingroup avr_stdint
249  fastest unsigned int with at least 64 bits.
250  \note This type is not available when the compiler
251  option -mint8 is in effect. */
252 
254 #endif
255 
256 /*@}*/
257 
258 
259 /** \name Greatest-width integer types
260  Types designating integer data capable of representing any value of
261  any integer type in the corresponding signed or unsigned category */
262 
263 /*@{*/
264 
265 #if __USING_MINT8
266 typedef int32_t intmax_t;
267 
268 typedef uint32_t uintmax_t;
269 #else /* !__USING_MINT8 */
270 /** \ingroup avr_stdint
271  largest signed int available. */
272 
274 
275 /** \ingroup avr_stdint
276  largest unsigned int available. */
277 
279 #endif /* __USING_MINT8 */
280 
281 /*@}*/
282 
283 /* Helping macro */
284 #ifndef __CONCAT
285 #define __CONCATenate(left, right) left ## right
286 #define __CONCAT(left, right) __CONCATenate(left, right)
287 #endif
288 
289 #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)
290 
291 /** \name Limits of specified-width integer types
292  C++ implementations should define these macros only when
293  __STDC_LIMIT_MACROS is defined before <stdint.h> is included */
294 
295 /*@{*/
296 
297 /** \ingroup avr_stdint
298  largest positive value an int8_t can hold. */
299 
300 #define INT8_MAX 0x7f
301 
302 /** \ingroup avr_stdint
303  smallest negative value an int8_t can hold. */
304 
305 #define INT8_MIN (-INT8_MAX - 1)
306 
307 /** \ingroup avr_stdint
308  largest value an uint8_t can hold. */
309 
310 #define UINT8_MAX (__CONCAT(INT8_MAX, U) * 2U + 1U)
311 
312 #if __USING_MINT8
313 
314 #define INT16_MAX 0x7fffL
315 #define INT16_MIN (-INT16_MAX - 1L)
316 #define UINT16_MAX (__CONCAT(INT16_MAX, U) * 2UL + 1UL)
317 
318 #define INT32_MAX 0x7fffffffLL
319 #define INT32_MIN (-INT32_MAX - 1LL)
320 #define UINT32_MAX (__CONCAT(INT32_MAX, U) * 2ULL + 1ULL)
321 
322 #else /* !__USING_MINT8 */
323 
324 /** \ingroup avr_stdint
325  largest positive value an int16_t can hold. */
326 
327 #define INT16_MAX 0x7fff
328 
329 /** \ingroup avr_stdint
330  smallest negative value an int16_t can hold. */
331 
332 #define INT16_MIN (-INT16_MAX - 1)
333 
334 /** \ingroup avr_stdint
335  largest value an uint16_t can hold. */
336 
337 #define UINT16_MAX (__CONCAT(INT16_MAX, U) * 2U + 1U)
338 
339 /** \ingroup avr_stdint
340  largest positive value an int32_t can hold. */
341 
342 #define INT32_MAX 0x7fffffffL
343 
344 /** \ingroup avr_stdint
345  smallest negative value an int32_t can hold. */
346 
347 #define INT32_MIN (-INT32_MAX - 1L)
348 
349 /** \ingroup avr_stdint
350  largest value an uint32_t can hold. */
351 
352 #define UINT32_MAX (__CONCAT(INT32_MAX, U) * 2UL + 1UL)
353 
354 #endif /* __USING_MINT8 */
355 
356 /** \ingroup avr_stdint
357  largest positive value an int64_t can hold. */
358 
359 #define INT64_MAX 0x7fffffffffffffffLL
360 
361 /** \ingroup avr_stdint
362  smallest negative value an int64_t can hold. */
363 
364 #define INT64_MIN (-INT64_MAX - 1LL)
365 
366 /** \ingroup avr_stdint
367  largest value an uint64_t can hold. */
368 
369 #define UINT64_MAX (__CONCAT(INT64_MAX, U) * 2ULL + 1ULL)
370 
371 /*@}*/
372 
373 /** \name Limits of minimum-width integer types */
374 /*@{*/
375 
376 /** \ingroup avr_stdint
377  largest positive value an int_least8_t can hold. */
378 
379 #define INT_LEAST8_MAX INT8_MAX
380 
381 /** \ingroup avr_stdint
382  smallest negative value an int_least8_t can hold. */
383 
384 #define INT_LEAST8_MIN INT8_MIN
385 
386 /** \ingroup avr_stdint
387  largest value an uint_least8_t can hold. */
388 
389 #define UINT_LEAST8_MAX UINT8_MAX
390 
391 /** \ingroup avr_stdint
392  largest positive value an int_least16_t can hold. */
393 
394 #define INT_LEAST16_MAX INT16_MAX
395 
396 /** \ingroup avr_stdint
397  smallest negative value an int_least16_t can hold. */
398 
399 #define INT_LEAST16_MIN INT16_MIN
400 
401 /** \ingroup avr_stdint
402  largest value an uint_least16_t can hold. */
403 
404 #define UINT_LEAST16_MAX UINT16_MAX
405 
406 /** \ingroup avr_stdint
407  largest positive value an int_least32_t can hold. */
408 
409 #define INT_LEAST32_MAX INT32_MAX
410 
411 /** \ingroup avr_stdint
412  smallest negative value an int_least32_t can hold. */
413 
414 #define INT_LEAST32_MIN INT32_MIN
415 
416 /** \ingroup avr_stdint
417  largest value an uint_least32_t can hold. */
418 
419 #define UINT_LEAST32_MAX UINT32_MAX
420 
421 /** \ingroup avr_stdint
422  largest positive value an int_least64_t can hold. */
423 
424 #define INT_LEAST64_MAX INT64_MAX
425 
426 /** \ingroup avr_stdint
427  smallest negative value an int_least64_t can hold. */
428 
429 #define INT_LEAST64_MIN INT64_MIN
430 
431 /** \ingroup avr_stdint
432  largest value an uint_least64_t can hold. */
433 
434 #define UINT_LEAST64_MAX UINT64_MAX
435 
436 /*@}*/
437 
438 /** \name Limits of fastest minimum-width integer types */
439 
440 /*@{*/
441 
442 /** \ingroup avr_stdint
443  largest positive value an int_fast8_t can hold. */
444 
445 #define INT_FAST8_MAX INT8_MAX
446 
447 /** \ingroup avr_stdint
448  smallest negative value an int_fast8_t can hold. */
449 
450 #define INT_FAST8_MIN INT8_MIN
451 
452 /** \ingroup avr_stdint
453  largest value an uint_fast8_t can hold. */
454 
455 #define UINT_FAST8_MAX UINT8_MAX
456 
457 /** \ingroup avr_stdint
458  largest positive value an int_fast16_t can hold. */
459 
460 #define INT_FAST16_MAX INT16_MAX
461 
462 /** \ingroup avr_stdint
463  smallest negative value an int_fast16_t can hold. */
464 
465 #define INT_FAST16_MIN INT16_MIN
466 
467 /** \ingroup avr_stdint
468  largest value an uint_fast16_t can hold. */
469 
470 #define UINT_FAST16_MAX UINT16_MAX
471 
472 /** \ingroup avr_stdint
473  largest positive value an int_fast32_t can hold. */
474 
475 #define INT_FAST32_MAX INT32_MAX
476 
477 /** \ingroup avr_stdint
478  smallest negative value an int_fast32_t can hold. */
479 
480 #define INT_FAST32_MIN INT32_MIN
481 
482 /** \ingroup avr_stdint
483  largest value an uint_fast32_t can hold. */
484 
485 #define UINT_FAST32_MAX UINT32_MAX
486 
487 /** \ingroup avr_stdint
488  largest positive value an int_fast64_t can hold. */
489 
490 #define INT_FAST64_MAX INT64_MAX
491 
492 /** \ingroup avr_stdint
493  smallest negative value an int_fast64_t can hold. */
494 
495 #define INT_FAST64_MIN INT64_MIN
496 
497 /** \ingroup avr_stdint
498  largest value an uint_fast64_t can hold. */
499 
500 #define UINT_FAST64_MAX UINT64_MAX
501 
502 /*@}*/
503 
504 /** \name Limits of integer types capable of holding object pointers */
505 
506 /*@{*/
507 
508 /** \ingroup avr_stdint
509  largest positive value an intptr_t can hold. */
510 
511 #define INTPTR_MAX INT16_MAX
512 
513 /** \ingroup avr_stdint
514  smallest negative value an intptr_t can hold. */
515 
516 #define INTPTR_MIN INT16_MIN
517 
518 /** \ingroup avr_stdint
519  largest value an uintptr_t can hold. */
520 
521 #define UINTPTR_MAX UINT16_MAX
522 
523 /*@}*/
524 
525 /** \name Limits of greatest-width integer types */
526 
527 /*@{*/
528 
529 /** \ingroup avr_stdint
530  largest positive value an intmax_t can hold. */
531 
532 #define INTMAX_MAX INT64_MAX
533 
534 /** \ingroup avr_stdint
535  smallest negative value an intmax_t can hold. */
536 
537 #define INTMAX_MIN INT64_MIN
538 
539 /** \ingroup avr_stdint
540  largest value an uintmax_t can hold. */
541 
542 #define UINTMAX_MAX UINT64_MAX
543 
544 /*@}*/
545 
546 /** \name Limits of other integer types
547  C++ implementations should define these macros only when
548  __STDC_LIMIT_MACROS is defined before <stdint.h> is included */
549 
550 /*@{*/
551 
552 /** \ingroup avr_stdint
553  largest positive value a ptrdiff_t can hold. */
554 
555 #define PTRDIFF_MAX INT16_MAX
556 
557 /** \ingroup avr_stdint
558  smallest negative value a ptrdiff_t can hold. */
559 
560 #define PTRDIFF_MIN INT16_MIN
561 
562 
563 /* Limits of sig_atomic_t */
564 /* signal.h is currently not implemented (not avr/signal.h) */
565 
566 /** \ingroup avr_stdint
567  largest positive value a sig_atomic_t can hold. */
568 
569 #define SIG_ATOMIC_MAX INT8_MAX
570 
571 /** \ingroup avr_stdint
572  smallest negative value a sig_atomic_t can hold. */
573 
574 #define SIG_ATOMIC_MIN INT8_MIN
575 
576 
577 /** \ingroup avr_stdint
578  largest value a size_t can hold. */
579 
580 #define SIZE_MAX (__CONCAT(INT16_MAX, U))
581 
582 
583 /* Limits of wchar_t */
584 /* wchar.h is currently not implemented */
585 /* #define WCHAR_MAX */
586 /* #define WCHAR_MIN */
587 
588 
589 /* Limits of wint_t */
590 /* wchar.h is currently not implemented */
591 /* #define WINT_MAX */
592 /* #define WINT_MIN */
593 
594 
595 #endif /* !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) */
596 
597 #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)
598 
599 /** \name Macros for integer constants
600  C++ implementations should define these macros only when
601  __STDC_CONSTANT_MACROS is defined before <stdint.h> is included.
602 
603  These definitions are valid for integer constants without suffix and
604  for macros defined as integer constant without suffix */
605 
606 /** \ingroup avr_stdint
607  define a constant of type int8_t */
608 
609 #define INT8_C(value) ((int8_t) value)
610 
611 /** \ingroup avr_stdint
612  define a constant of type uint8_t */
613 
614 #define UINT8_C(value) ((uint8_t) __CONCAT(value, U))
615 
616 #if __USING_MINT8
617 
618 #define INT16_C(value) __CONCAT(value, L)
619 #define UINT16_C(value) __CONCAT(value, UL)
620 
621 #define INT32_C(value) ((int32_t) __CONCAT(value, LL))
622 #define UINT32_C(value) ((uint32_t) __CONCAT(value, ULL))
623 
624 #else /* !__USING_MINT8 */
625 
626 /** \ingroup avr_stdint
627  define a constant of type int16_t */
628 
629 #define INT16_C(value) value
630 
631 /** \ingroup avr_stdint
632  define a constant of type uint16_t */
633 
634 #define UINT16_C(value) __CONCAT(value, U)
635 
636 /** \ingroup avr_stdint
637  define a constant of type int32_t */
638 
639 #define INT32_C(value) __CONCAT(value, L)
640 
641 /** \ingroup avr_stdint
642  define a constant of type uint32_t */
643 
644 #define UINT32_C(value) __CONCAT(value, UL)
645 
646 #endif /* __USING_MINT8 */
647 
648 /** \ingroup avr_stdint
649  define a constant of type int64_t */
650 
651 #define INT64_C(value) __CONCAT(value, LL)
652 
653 /** \ingroup avr_stdint
654  define a constant of type uint64_t */
655 
656 #define UINT64_C(value) __CONCAT(value, ULL)
657 
658 /** \ingroup avr_stdint
659  define a constant of type intmax_t */
660 
661 #define INTMAX_C(value) __CONCAT(value, LL)
662 
663 /** \ingroup avr_stdint
664  define a constant of type uintmax_t */
665 
666 #define UINTMAX_C(value) __CONCAT(value, ULL)
667 
668 /*@}*/
669 
670 #endif /* !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) */
671 
672 
673 #endif /* _STDINT_H_ */
int16_t intptr_t
Definition: stdint.h:142
signed long long int int64_t
Definition: stdint.h:106
uint64_t uint_least64_t
Definition: stdint.h:199
uint64_t uint_fast64_t
Definition: stdint.h:253
int64_t int_fast64_t
Definition: stdint.h:246
int32_t int_fast32_t
Definition: stdint.h:233
signed int int16_t
Definition: stdint.h:84
signed char int8_t
Definition: stdint.h:74
uint64_t uintmax_t
Definition: stdint.h:278
int32_t int_least32_t
Definition: stdint.h:179
signed long int int32_t
Definition: stdint.h:94
int8_t int_least8_t
Definition: stdint.h:159
int64_t int_least64_t
Definition: stdint.h:192
int8_t int_fast8_t
Definition: stdint.h:213
uint16_t uint_fast16_t
Definition: stdint.h:228
uint16_t uintptr_t
Definition: stdint.h:147
unsigned char uint8_t
Definition: stdint.h:79
unsigned long int uint32_t
Definition: stdint.h:99
uint8_t uint_fast8_t
Definition: stdint.h:218
uint16_t uint_least16_t
Definition: stdint.h:174
uint32_t uint_fast32_t
Definition: stdint.h:238
uint32_t uint_least32_t
Definition: stdint.h:184
unsigned long long int uint64_t
Definition: stdint.h:113
int64_t intmax_t
Definition: stdint.h:273
uint8_t uint_least8_t
Definition: stdint.h:164
int16_t int_least16_t
Definition: stdint.h:169
unsigned int uint16_t
Definition: stdint.h:89
int16_t int_fast16_t
Definition: stdint.h:223

Automatically generated by Doxygen 1.8.7 on Tue Jul 8 2014. Dash Docset conversion by Matt Kane