1c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/** 2c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * This file has no copyright assigned and is placed in the Public Domain. 3c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * This file was originally part of the w64 mingw-runtime package. 4c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard */ 5c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 6c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* ISO C9x 7.18 Integer types <stdint.h> 7c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * Based on ISO/IEC SC22/WG14 9899 Committee draft (SC22 N2794) 8c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * 9c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * THIS SOFTWARE IS NOT COPYRIGHTED 10c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * 11c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * Contributor: Danny Smith <danny_r_smith_2001@yahoo.co.nz> 12c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * Modified for libusb/MSVC: Pete Batard <pbatard@gmail.com> 13c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * 14c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * This source code is offered for use in the public domain. You may 15c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * use, modify or distribute it freely. 16c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * 17c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * This code is distributed in the hope that it will be useful but 18c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 19c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * DISCLAIMED. This includes but is not limited to warranties of 20c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 21c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * 22c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * Date: 2010-04-02 23c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard */ 24c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 25c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _MSC_VER 26c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#error This header should only be used with Microsoft compilers 27c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif 28c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 29c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _STDINT_H 30c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define _STDINT_H 31c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 32c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _INTPTR_T_DEFINED 33c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define _INTPTR_T_DEFINED 34c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef __intptr_t_defined 35c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define __intptr_t_defined 36c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#undef intptr_t 37c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifdef _WIN64 38c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard typedef __int64 intptr_t; 39c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#else 40c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard typedef int intptr_t; 41c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _WIN64 */ 42c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* __intptr_t_defined */ 43c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _INTPTR_T_DEFINED */ 44c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 45c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _UINTPTR_T_DEFINED 46c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define _UINTPTR_T_DEFINED 47c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef __uintptr_t_defined 48c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define __uintptr_t_defined 49c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#undef uintptr_t 50c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifdef _WIN64 51c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard typedef unsigned __int64 uintptr_t; 52c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#else 53c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard typedef unsigned int uintptr_t; 54c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _WIN64 */ 55c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* __uintptr_t_defined */ 56c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _UINTPTR_T_DEFINED */ 57c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 58c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _PTRDIFF_T_DEFINED 59c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define _PTRDIFF_T_DEFINED 60c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _PTRDIFF_T_ 61c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define _PTRDIFF_T_ 62c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#undef ptrdiff_t 63c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifdef _WIN64 64c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard typedef __int64 ptrdiff_t; 65c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#else 66c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard typedef int ptrdiff_t; 67c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _WIN64 */ 68c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _PTRDIFF_T_ */ 69c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _PTRDIFF_T_DEFINED */ 70c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 71c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _WCHAR_T_DEFINED 72c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define _WCHAR_T_DEFINED 73c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef __cplusplus 74c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard typedef unsigned short wchar_t; 75c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* C++ */ 76c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _WCHAR_T_DEFINED */ 77c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 78c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _WCTYPE_T_DEFINED 79c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define _WCTYPE_T_DEFINED 80c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef _WINT_T 81c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define _WINT_T 82c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard typedef unsigned short wint_t; 83c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard typedef unsigned short wctype_t; 84c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _WINT_T */ 85c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif /* _WCTYPE_T_DEFINED */ 86c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 87c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.1.1 Exact-width integer types */ 88c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int8 int8_t; 89c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int8 uint8_t; 90c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int16 int16_t; 91c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int16 uint16_t; 92c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int32 int32_t; 93c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int32 uint32_t; 94c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int64 int64_t; 95c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int64 uint64_t; 96c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 97c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.1.2 Minimum-width integer types */ 98c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef signed char int_least8_t; 99c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned char uint_least8_t; 100c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef short int_least16_t; 101c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned short uint_least16_t; 102c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef int int_least32_t; 103c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned uint_least32_t; 104c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int64 int_least64_t; 105c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int64 uint_least64_t; 106c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 107c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.1.3 Fastest minimum-width integer types 108c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * Not actually guaranteed to be fastest for all purposes 109c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * Here we use the exact-width types for 8 and 16-bit ints. 110c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard */ 111c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int8 int_fast8_t; 112c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int8 uint_fast8_t; 113c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int16 int_fast16_t; 114c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int16 uint_fast16_t; 115c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int32 int_fast32_t; 116c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int32 uint_fast32_t; 117c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int64 int_fast64_t; 118c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int64 uint_fast64_t; 119c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 120c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.1.5 Greatest-width integer types */ 121c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef __int64 intmax_t; 122c1e75431418cdfc10ec963d823fce479cdae6840Pete Batardtypedef unsigned __int64 uintmax_t; 123c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 124c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.2 Limits of specified-width integer types */ 125c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 126c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.2.1 Limits of exact-width integer types */ 127c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT8_MIN (-128) 128c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT16_MIN (-32768) 129c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT32_MIN (-2147483647 - 1) 130c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT64_MIN (-9223372036854775807LL - 1) 131c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 132c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT8_MAX 127 133c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT16_MAX 32767 134c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT32_MAX 2147483647 135c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT64_MAX 9223372036854775807LL 136c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 137c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT8_MAX 255 138c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT16_MAX 65535 139c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT32_MAX 0xffffffffU /* 4294967295U */ 140c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT64_MAX 0xffffffffffffffffULL /* 18446744073709551615ULL */ 141c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 142c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.2.2 Limits of minimum-width integer types */ 143c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_LEAST8_MIN INT8_MIN 144c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_LEAST16_MIN INT16_MIN 145c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_LEAST32_MIN INT32_MIN 146c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_LEAST64_MIN INT64_MIN 147c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 148c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_LEAST8_MAX INT8_MAX 149c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_LEAST16_MAX INT16_MAX 150c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_LEAST32_MAX INT32_MAX 151c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_LEAST64_MAX INT64_MAX 152c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 153c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT_LEAST8_MAX UINT8_MAX 154c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT_LEAST16_MAX UINT16_MAX 155c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT_LEAST32_MAX UINT32_MAX 156c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT_LEAST64_MAX UINT64_MAX 157c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 158c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.2.3 Limits of fastest minimum-width integer types */ 159c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_FAST8_MIN INT8_MIN 160c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_FAST16_MIN INT16_MIN 161c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_FAST32_MIN INT32_MIN 162c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_FAST64_MIN INT64_MIN 163c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 164c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_FAST8_MAX INT8_MAX 165c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_FAST16_MAX INT16_MAX 166c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_FAST32_MAX INT32_MAX 167c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT_FAST64_MAX INT64_MAX 168c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 169c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT_FAST8_MAX UINT8_MAX 170c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT_FAST16_MAX UINT16_MAX 171c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT_FAST32_MAX UINT32_MAX 172c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT_FAST64_MAX UINT64_MAX 173c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 174c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.2.4 Limits of integer types capable of holding 175c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard object pointers */ 176c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifdef _WIN64 177c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INTPTR_MIN INT64_MIN 178c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INTPTR_MAX INT64_MAX 179c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINTPTR_MAX UINT64_MAX 180c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#else 181c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INTPTR_MIN INT32_MIN 182c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INTPTR_MAX INT32_MAX 183c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINTPTR_MAX UINT32_MAX 184c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif 185c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 186c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.2.5 Limits of greatest-width integer types */ 187c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INTMAX_MIN INT64_MIN 188c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INTMAX_MAX INT64_MAX 189c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINTMAX_MAX UINT64_MAX 190c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 191c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.3 Limits of other integer types */ 192c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifdef _WIN64 193c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define PTRDIFF_MIN INT64_MIN 194c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define PTRDIFF_MAX INT64_MAX 195c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#else 196c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define PTRDIFF_MIN INT32_MIN 197c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define PTRDIFF_MAX INT32_MAX 198c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif 199c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 200c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define SIG_ATOMIC_MIN INT32_MIN 201c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define SIG_ATOMIC_MAX INT32_MAX 202c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 203c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef SIZE_MAX 204c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifdef _WIN64 205c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define SIZE_MAX UINT64_MAX 206c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#else 207c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define SIZE_MAX UINT32_MAX 208c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif 209c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif 210c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 211c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#ifndef WCHAR_MIN /* also in wchar.h */ 212c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define WCHAR_MIN 0U 213c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define WCHAR_MAX 0xffffU 214c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif 215c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 216c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 217c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard * wint_t is unsigned short for compatibility with MS runtime 218c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard */ 219c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define WINT_MIN 0U 220c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define WINT_MAX 0xffffU 221c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 222c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 223c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.4 Macros for integer constants */ 224c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 225c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.4.1 Macros for minimum-width integer constants 226c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 227c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard Accoding to Douglas Gwyn <gwyn@arl.mil>: 228c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard "This spec was changed in ISO/IEC 9899:1999 TC1; in ISO/IEC 229c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 9899:1999 as initially published, the expansion was required 230c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard to be an integer constant of precisely matching type, which 231c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard is impossible to accomplish for the shorter types on most 232c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard platforms, because C99 provides no standard way to designate 233c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard an integer constant with width less than that of type int. 234c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard TC1 changed this to require just an integer constant 235c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard *expression* with *promoted* type." 236c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 237c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard The trick used here is from Clive D W Feather. 238c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard*/ 239c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 240c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT8_C(val) (INT_LEAST8_MAX-INT_LEAST8_MAX+(val)) 241c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT16_C(val) (INT_LEAST16_MAX-INT_LEAST16_MAX+(val)) 242c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT32_C(val) (INT_LEAST32_MAX-INT_LEAST32_MAX+(val)) 243c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* The 'trick' doesn't work in C89 for long long because, without 244c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard suffix, (val) will be evaluated as int, not intmax_t */ 245c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INT64_C(val) val##i64 246c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 247c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT8_C(val) (val) 248c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT16_C(val) (val) 249c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT32_C(val) (val##i32) 250c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINT64_C(val) val##ui64 251c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 252c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard/* 7.18.4.2 Macros for greatest-width integer constants */ 253c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define INTMAX_C(val) val##i64 254c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#define UINTMAX_C(val) val##ui64 255c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard 256c1e75431418cdfc10ec963d823fce479cdae6840Pete Batard#endif 257