openalbridge/winstdint.h
changeset 2200 8192be6e3aef
child 2209 2573d4ff78f9
equal deleted inserted replaced
2199:be265856322f 2200:8192be6e3aef
       
     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-2008 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. The name of the author may be used to endorse or promote products
       
    17 //      derived from this software without specific prior written permission.
       
    18 // 
       
    19 // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
       
    20 // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
       
    21 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
       
    22 // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
       
    23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
       
    24 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
       
    25 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
       
    26 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
       
    27 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
       
    28 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
    29 // 
       
    30 ///////////////////////////////////////////////////////////////////////////////
       
    31 
       
    32 #ifndef _MSC_VER // [
       
    33 #error "Use this header only with Microsoft Visual C++ compilers!"
       
    34 #endif // _MSC_VER ]
       
    35 
       
    36 #ifndef _MSC_STDINT_H_ // [
       
    37 #define _MSC_STDINT_H_
       
    38 
       
    39 #if _MSC_VER > 1000
       
    40 #pragma once
       
    41 #endif
       
    42 
       
    43 #include <limits.h>
       
    44 
       
    45 // For Visual Studio 6 in C++ mode and for many Visual Studio versions when
       
    46 // compiling for ARM we should wrap <wchar.h> include with 'extern "C++" {}'
       
    47 // or compiler give many errors like this:
       
    48 //   error C2733: second C linkage of overloaded function 'wmemchr' not allowed
       
    49 #ifdef __cplusplus
       
    50 extern "C" {
       
    51 #endif
       
    52 #  include <wchar.h>
       
    53 #ifdef __cplusplus
       
    54 }
       
    55 #endif
       
    56 
       
    57 // Define _W64 macros to mark types changing their size, like intptr_t.
       
    58 #ifndef _W64
       
    59 #  if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
       
    60 #     define _W64 __w64
       
    61 #  else
       
    62 #     define _W64
       
    63 #  endif
       
    64 #endif
       
    65 
       
    66 
       
    67 // 7.18.1 Integer types
       
    68 
       
    69 // 7.18.1.1 Exact-width integer types
       
    70 
       
    71 // Visual Studio 6 and Embedded Visual C++ 4 doesn't
       
    72 // realize that, e.g. char has the same size as __int8
       
    73 // so we give up on __intX for them.
       
    74 #if (_MSC_VER < 1300)
       
    75    typedef char              int8_t;
       
    76    typedef short             int16_t;
       
    77    typedef int               int32_t;
       
    78    typedef unsigned char     uint8_t;
       
    79    typedef unsigned short    uint16_t;
       
    80    typedef unsigned int      uint32_t;
       
    81 #else
       
    82    typedef __int8            int8_t;
       
    83    typedef __int16           int16_t;
       
    84    typedef __int32           int32_t;
       
    85    typedef unsigned __int8   uint8_t;
       
    86    typedef unsigned __int16  uint16_t;
       
    87    typedef unsigned __int32  uint32_t;
       
    88 #endif
       
    89 typedef __int64              int64_t;
       
    90 typedef unsigned __int64     uint64_t;
       
    91 
       
    92 
       
    93 // 7.18.1.2 Minimum-width integer types
       
    94 typedef int8_t    int_least8_t;
       
    95 typedef int16_t   int_least16_t;
       
    96 typedef int32_t   int_least32_t;
       
    97 typedef int64_t   int_least64_t;
       
    98 typedef uint8_t   uint_least8_t;
       
    99 typedef uint16_t  uint_least16_t;
       
   100 typedef uint32_t  uint_least32_t;
       
   101 typedef uint64_t  uint_least64_t;
       
   102 
       
   103 // 7.18.1.3 Fastest minimum-width integer types
       
   104 typedef int8_t    int_fast8_t;
       
   105 typedef int16_t   int_fast16_t;
       
   106 typedef int32_t   int_fast32_t;
       
   107 typedef int64_t   int_fast64_t;
       
   108 typedef uint8_t   uint_fast8_t;
       
   109 typedef uint16_t  uint_fast16_t;
       
   110 typedef uint32_t  uint_fast32_t;
       
   111 typedef uint64_t  uint_fast64_t;
       
   112 
       
   113 // 7.18.1.4 Integer types capable of holding object pointers
       
   114 #ifdef _WIN64 // [
       
   115    typedef __int64           intptr_t;
       
   116    typedef unsigned __int64  uintptr_t;
       
   117 #else // _WIN64 ][
       
   118    typedef _W64 int               intptr_t;
       
   119    typedef _W64 unsigned int      uintptr_t;
       
   120 #endif // _WIN64 ]
       
   121 
       
   122 // 7.18.1.5 Greatest-width integer types
       
   123 typedef int64_t   intmax_t;
       
   124 typedef uint64_t  uintmax_t;
       
   125 
       
   126 
       
   127 // 7.18.2 Limits of specified-width integer types
       
   128 
       
   129 #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [   See footnote 220 at page 257 and footnote 221 at page 259
       
   130 
       
   131 // 7.18.2.1 Limits of exact-width integer types
       
   132 #define INT8_MIN     ((int8_t)_I8_MIN)
       
   133 #define INT8_MAX     _I8_MAX
       
   134 #define INT16_MIN    ((int16_t)_I16_MIN)
       
   135 #define INT16_MAX    _I16_MAX
       
   136 #define INT32_MIN    ((int32_t)_I32_MIN)
       
   137 #define INT32_MAX    _I32_MAX
       
   138 #define INT64_MIN    ((int64_t)_I64_MIN)
       
   139 #define INT64_MAX    _I64_MAX
       
   140 #define UINT8_MAX    _UI8_MAX
       
   141 #define UINT16_MAX   _UI16_MAX
       
   142 #define UINT32_MAX   _UI32_MAX
       
   143 #define UINT64_MAX   _UI64_MAX
       
   144 
       
   145 // 7.18.2.2 Limits of minimum-width integer types
       
   146 #define INT_LEAST8_MIN    INT8_MIN
       
   147 #define INT_LEAST8_MAX    INT8_MAX
       
   148 #define INT_LEAST16_MIN   INT16_MIN
       
   149 #define INT_LEAST16_MAX   INT16_MAX
       
   150 #define INT_LEAST32_MIN   INT32_MIN
       
   151 #define INT_LEAST32_MAX   INT32_MAX
       
   152 #define INT_LEAST64_MIN   INT64_MIN
       
   153 #define INT_LEAST64_MAX   INT64_MAX
       
   154 #define UINT_LEAST8_MAX   UINT8_MAX
       
   155 #define UINT_LEAST16_MAX  UINT16_MAX
       
   156 #define UINT_LEAST32_MAX  UINT32_MAX
       
   157 #define UINT_LEAST64_MAX  UINT64_MAX
       
   158 
       
   159 // 7.18.2.3 Limits of fastest minimum-width integer types
       
   160 #define INT_FAST8_MIN    INT8_MIN
       
   161 #define INT_FAST8_MAX    INT8_MAX
       
   162 #define INT_FAST16_MIN   INT16_MIN
       
   163 #define INT_FAST16_MAX   INT16_MAX
       
   164 #define INT_FAST32_MIN   INT32_MIN
       
   165 #define INT_FAST32_MAX   INT32_MAX
       
   166 #define INT_FAST64_MIN   INT64_MIN
       
   167 #define INT_FAST64_MAX   INT64_MAX
       
   168 #define UINT_FAST8_MAX   UINT8_MAX
       
   169 #define UINT_FAST16_MAX  UINT16_MAX
       
   170 #define UINT_FAST32_MAX  UINT32_MAX
       
   171 #define UINT_FAST64_MAX  UINT64_MAX
       
   172 
       
   173 // 7.18.2.4 Limits of integer types capable of holding object pointers
       
   174 #ifdef _WIN64 // [
       
   175 #  define INTPTR_MIN   INT64_MIN
       
   176 #  define INTPTR_MAX   INT64_MAX
       
   177 #  define UINTPTR_MAX  UINT64_MAX
       
   178 #else // _WIN64 ][
       
   179 #  define INTPTR_MIN   INT32_MIN
       
   180 #  define INTPTR_MAX   INT32_MAX
       
   181 #  define UINTPTR_MAX  UINT32_MAX
       
   182 #endif // _WIN64 ]
       
   183 
       
   184 // 7.18.2.5 Limits of greatest-width integer types
       
   185 #define INTMAX_MIN   INT64_MIN
       
   186 #define INTMAX_MAX   INT64_MAX
       
   187 #define UINTMAX_MAX  UINT64_MAX
       
   188 
       
   189 // 7.18.3 Limits of other integer types
       
   190 
       
   191 #ifdef _WIN64 // [
       
   192 #  define PTRDIFF_MIN  _I64_MIN
       
   193 #  define PTRDIFF_MAX  _I64_MAX
       
   194 #else  // _WIN64 ][
       
   195 #  define PTRDIFF_MIN  _I32_MIN
       
   196 #  define PTRDIFF_MAX  _I32_MAX
       
   197 #endif  // _WIN64 ]
       
   198 
       
   199 #define SIG_ATOMIC_MIN  INT_MIN
       
   200 #define SIG_ATOMIC_MAX  INT_MAX
       
   201 
       
   202 #ifndef SIZE_MAX // [
       
   203 #  ifdef _WIN64 // [
       
   204 #     define SIZE_MAX  _UI64_MAX
       
   205 #  else // _WIN64 ][
       
   206 #     define SIZE_MAX  _UI32_MAX
       
   207 #  endif // _WIN64 ]
       
   208 #endif // SIZE_MAX ]
       
   209 
       
   210 // WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
       
   211 #ifndef WCHAR_MIN // [
       
   212 #  define WCHAR_MIN  0
       
   213 #endif  // WCHAR_MIN ]
       
   214 #ifndef WCHAR_MAX // [
       
   215 #  define WCHAR_MAX  _UI16_MAX
       
   216 #endif  // WCHAR_MAX ]
       
   217 
       
   218 #define WINT_MIN  0
       
   219 #define WINT_MAX  _UI16_MAX
       
   220 
       
   221 #endif // __STDC_LIMIT_MACROS ]
       
   222 
       
   223 
       
   224 // 7.18.4 Limits of other integer types
       
   225 
       
   226 #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [   See footnote 224 at page 260
       
   227 
       
   228 // 7.18.4.1 Macros for minimum-width integer constants
       
   229 
       
   230 #define INT8_C(val)  val##i8
       
   231 #define INT16_C(val) val##i16
       
   232 #define INT32_C(val) val##i32
       
   233 #define INT64_C(val) val##i64
       
   234 
       
   235 #define UINT8_C(val)  val##ui8
       
   236 #define UINT16_C(val) val##ui16
       
   237 #define UINT32_C(val) val##ui32
       
   238 #define UINT64_C(val) val##ui64
       
   239 
       
   240 // 7.18.4.2 Macros for greatest-width integer constants
       
   241 #define INTMAX_C   INT64_C
       
   242 #define UINTMAX_C  UINT64_C
       
   243 
       
   244 #endif // __STDC_CONSTANT_MACROS ]
       
   245 
       
   246 
       
   247 #endif // _MSC_STDINT_H_ ]
       
   248 // ISO C9x  compliant stdint.h for Microsoft Visual Studio
       
   249 // Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 
       
   250 // 
       
   251 //  Copyright (c) 2006-2008 Alexander Chemeris
       
   252 // 
       
   253 // Redistribution and use in source and binary forms, with or without
       
   254 // modification, are permitted provided that the following conditions are met:
       
   255 // 
       
   256 //   1. Redistributions of source code must retain the above copyright notice,
       
   257 //      this list of conditions and the following disclaimer.
       
   258 // 
       
   259 //   2. Redistributions in binary form must reproduce the above copyright
       
   260 //      notice, this list of conditions and the following disclaimer in the
       
   261 //      documentation and/or other materials provided with the distribution.
       
   262 // 
       
   263 //   3. The name of the author may be used to endorse or promote products
       
   264 //      derived from this software without specific prior written permission.
       
   265 // 
       
   266 // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
       
   267 // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
       
   268 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
       
   269 // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
       
   270 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
       
   271 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
       
   272 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
       
   273 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
       
   274 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
       
   275 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
   276 // 
       
   277 ///////////////////////////////////////////////////////////////////////////////
       
   278 
       
   279 #ifndef _MSC_VER // [
       
   280 #error "Use this header only with Microsoft Visual C++ compilers!"
       
   281 #endif // _MSC_VER ]
       
   282 
       
   283 #ifndef _MSC_STDINT_H_ // [
       
   284 #define _MSC_STDINT_H_
       
   285 
       
   286 #if _MSC_VER > 1000
       
   287 #pragma once
       
   288 #endif
       
   289 
       
   290 #include <limits.h>
       
   291 
       
   292 // For Visual Studio 6 in C++ mode and for many Visual Studio versions when
       
   293 // compiling for ARM we should wrap <wchar.h> include with 'extern "C++" {}'
       
   294 // or compiler give many errors like this:
       
   295 //   error C2733: second C linkage of overloaded function 'wmemchr' not allowed
       
   296 #ifdef __cplusplus
       
   297 extern "C" {
       
   298 #endif
       
   299 #  include <wchar.h>
       
   300 #ifdef __cplusplus
       
   301 }
       
   302 #endif
       
   303 
       
   304 // Define _W64 macros to mark types changing their size, like intptr_t.
       
   305 #ifndef _W64
       
   306 #  if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
       
   307 #     define _W64 __w64
       
   308 #  else
       
   309 #     define _W64
       
   310 #  endif
       
   311 #endif
       
   312 
       
   313 
       
   314 // 7.18.1 Integer types
       
   315 
       
   316 // 7.18.1.1 Exact-width integer types
       
   317 
       
   318 // Visual Studio 6 and Embedded Visual C++ 4 doesn't
       
   319 // realize that, e.g. char has the same size as __int8
       
   320 // so we give up on __intX for them.
       
   321 #if (_MSC_VER < 1300)
       
   322    typedef char              int8_t;
       
   323    typedef short             int16_t;
       
   324    typedef int               int32_t;
       
   325    typedef unsigned char     uint8_t;
       
   326    typedef unsigned short    uint16_t;
       
   327    typedef unsigned int      uint32_t;
       
   328 #else
       
   329    typedef __int8            int8_t;
       
   330    typedef __int16           int16_t;
       
   331    typedef __int32           int32_t;
       
   332    typedef unsigned __int8   uint8_t;
       
   333    typedef unsigned __int16  uint16_t;
       
   334    typedef unsigned __int32  uint32_t;
       
   335 #endif
       
   336 typedef __int64              int64_t;
       
   337 typedef unsigned __int64     uint64_t;
       
   338 
       
   339 
       
   340 // 7.18.1.2 Minimum-width integer types
       
   341 typedef int8_t    int_least8_t;
       
   342 typedef int16_t   int_least16_t;
       
   343 typedef int32_t   int_least32_t;
       
   344 typedef int64_t   int_least64_t;
       
   345 typedef uint8_t   uint_least8_t;
       
   346 typedef uint16_t  uint_least16_t;
       
   347 typedef uint32_t  uint_least32_t;
       
   348 typedef uint64_t  uint_least64_t;
       
   349 
       
   350 // 7.18.1.3 Fastest minimum-width integer types
       
   351 typedef int8_t    int_fast8_t;
       
   352 typedef int16_t   int_fast16_t;
       
   353 typedef int32_t   int_fast32_t;
       
   354 typedef int64_t   int_fast64_t;
       
   355 typedef uint8_t   uint_fast8_t;
       
   356 typedef uint16_t  uint_fast16_t;
       
   357 typedef uint32_t  uint_fast32_t;
       
   358 typedef uint64_t  uint_fast64_t;
       
   359 
       
   360 // 7.18.1.4 Integer types capable of holding object pointers
       
   361 #ifdef _WIN64 // [
       
   362    typedef __int64           intptr_t;
       
   363    typedef unsigned __int64  uintptr_t;
       
   364 #else // _WIN64 ][
       
   365    typedef _W64 int               intptr_t;
       
   366    typedef _W64 unsigned int      uintptr_t;
       
   367 #endif // _WIN64 ]
       
   368 
       
   369 // 7.18.1.5 Greatest-width integer types
       
   370 typedef int64_t   intmax_t;
       
   371 typedef uint64_t  uintmax_t;
       
   372 
       
   373 
       
   374 // 7.18.2 Limits of specified-width integer types
       
   375 
       
   376 #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [   See footnote 220 at page 257 and footnote 221 at page 259
       
   377 
       
   378 // 7.18.2.1 Limits of exact-width integer types
       
   379 #define INT8_MIN     ((int8_t)_I8_MIN)
       
   380 #define INT8_MAX     _I8_MAX
       
   381 #define INT16_MIN    ((int16_t)_I16_MIN)
       
   382 #define INT16_MAX    _I16_MAX
       
   383 #define INT32_MIN    ((int32_t)_I32_MIN)
       
   384 #define INT32_MAX    _I32_MAX
       
   385 #define INT64_MIN    ((int64_t)_I64_MIN)
       
   386 #define INT64_MAX    _I64_MAX
       
   387 #define UINT8_MAX    _UI8_MAX
       
   388 #define UINT16_MAX   _UI16_MAX
       
   389 #define UINT32_MAX   _UI32_MAX
       
   390 #define UINT64_MAX   _UI64_MAX
       
   391 
       
   392 // 7.18.2.2 Limits of minimum-width integer types
       
   393 #define INT_LEAST8_MIN    INT8_MIN
       
   394 #define INT_LEAST8_MAX    INT8_MAX
       
   395 #define INT_LEAST16_MIN   INT16_MIN
       
   396 #define INT_LEAST16_MAX   INT16_MAX
       
   397 #define INT_LEAST32_MIN   INT32_MIN
       
   398 #define INT_LEAST32_MAX   INT32_MAX
       
   399 #define INT_LEAST64_MIN   INT64_MIN
       
   400 #define INT_LEAST64_MAX   INT64_MAX
       
   401 #define UINT_LEAST8_MAX   UINT8_MAX
       
   402 #define UINT_LEAST16_MAX  UINT16_MAX
       
   403 #define UINT_LEAST32_MAX  UINT32_MAX
       
   404 #define UINT_LEAST64_MAX  UINT64_MAX
       
   405 
       
   406 // 7.18.2.3 Limits of fastest minimum-width integer types
       
   407 #define INT_FAST8_MIN    INT8_MIN
       
   408 #define INT_FAST8_MAX    INT8_MAX
       
   409 #define INT_FAST16_MIN   INT16_MIN
       
   410 #define INT_FAST16_MAX   INT16_MAX
       
   411 #define INT_FAST32_MIN   INT32_MIN
       
   412 #define INT_FAST32_MAX   INT32_MAX
       
   413 #define INT_FAST64_MIN   INT64_MIN
       
   414 #define INT_FAST64_MAX   INT64_MAX
       
   415 #define UINT_FAST8_MAX   UINT8_MAX
       
   416 #define UINT_FAST16_MAX  UINT16_MAX
       
   417 #define UINT_FAST32_MAX  UINT32_MAX
       
   418 #define UINT_FAST64_MAX  UINT64_MAX
       
   419 
       
   420 // 7.18.2.4 Limits of integer types capable of holding object pointers
       
   421 #ifdef _WIN64 // [
       
   422 #  define INTPTR_MIN   INT64_MIN
       
   423 #  define INTPTR_MAX   INT64_MAX
       
   424 #  define UINTPTR_MAX  UINT64_MAX
       
   425 #else // _WIN64 ][
       
   426 #  define INTPTR_MIN   INT32_MIN
       
   427 #  define INTPTR_MAX   INT32_MAX
       
   428 #  define UINTPTR_MAX  UINT32_MAX
       
   429 #endif // _WIN64 ]
       
   430 
       
   431 // 7.18.2.5 Limits of greatest-width integer types
       
   432 #define INTMAX_MIN   INT64_MIN
       
   433 #define INTMAX_MAX   INT64_MAX
       
   434 #define UINTMAX_MAX  UINT64_MAX
       
   435 
       
   436 // 7.18.3 Limits of other integer types
       
   437 
       
   438 #ifdef _WIN64 // [
       
   439 #  define PTRDIFF_MIN  _I64_MIN
       
   440 #  define PTRDIFF_MAX  _I64_MAX
       
   441 #else  // _WIN64 ][
       
   442 #  define PTRDIFF_MIN  _I32_MIN
       
   443 #  define PTRDIFF_MAX  _I32_MAX
       
   444 #endif  // _WIN64 ]
       
   445 
       
   446 #define SIG_ATOMIC_MIN  INT_MIN
       
   447 #define SIG_ATOMIC_MAX  INT_MAX
       
   448 
       
   449 #ifndef SIZE_MAX // [
       
   450 #  ifdef _WIN64 // [
       
   451 #     define SIZE_MAX  _UI64_MAX
       
   452 #  else // _WIN64 ][
       
   453 #     define SIZE_MAX  _UI32_MAX
       
   454 #  endif // _WIN64 ]
       
   455 #endif // SIZE_MAX ]
       
   456 
       
   457 // WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
       
   458 #ifndef WCHAR_MIN // [
       
   459 #  define WCHAR_MIN  0
       
   460 #endif  // WCHAR_MIN ]
       
   461 #ifndef WCHAR_MAX // [
       
   462 #  define WCHAR_MAX  _UI16_MAX
       
   463 #endif  // WCHAR_MAX ]
       
   464 
       
   465 #define WINT_MIN  0
       
   466 #define WINT_MAX  _UI16_MAX
       
   467 
       
   468 #endif // __STDC_LIMIT_MACROS ]
       
   469 
       
   470 
       
   471 // 7.18.4 Limits of other integer types
       
   472 
       
   473 #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [   See footnote 224 at page 260
       
   474 
       
   475 // 7.18.4.1 Macros for minimum-width integer constants
       
   476 
       
   477 #define INT8_C(val)  val##i8
       
   478 #define INT16_C(val) val##i16
       
   479 #define INT32_C(val) val##i32
       
   480 #define INT64_C(val) val##i64
       
   481 
       
   482 #define UINT8_C(val)  val##ui8
       
   483 #define UINT16_C(val) val##ui16
       
   484 #define UINT32_C(val) val##ui32
       
   485 #define UINT64_C(val) val##ui64
       
   486 
       
   487 // 7.18.4.2 Macros for greatest-width integer constants
       
   488 #define INTMAX_C   INT64_C
       
   489 #define UINTMAX_C  UINT64_C
       
   490 
       
   491 #endif // __STDC_CONSTANT_MACROS ]
       
   492 
       
   493 
       
   494 #endif // _MSC_STDINT_H_ ]