stdint.h
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:8k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
  2.    This file is part of the GNU C Library.
  3.    The GNU C Library is free software; you can redistribute it and/or
  4.    modify it under the terms of the GNU Lesser General Public
  5.    License as published by the Free Software Foundation; either
  6.    version 2.1 of the License, or (at your option) any later version.
  7.    The GNU C Library is distributed in the hope that it will be useful,
  8.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  10.    Lesser General Public License for more details.
  11.    You should have received a copy of the GNU Lesser General Public
  12.    License along with the GNU C Library; if not, write to the Free
  13.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  14.    02111-1307 USA.  */
  15. /*
  16.  * ISO C99: 7.18 Integer types <stdint.h>
  17.  */
  18. #ifndef _STDINT_H
  19. #define _STDINT_H 1
  20. #include <features.h>
  21. #include <bits/wchar.h>
  22. #include <bits/wordsize.h>
  23. /* Exact integral types.  */
  24. /* Signed.  */
  25. /* There is some amount of overlap with <sys/types.h> as known by inet code */
  26. #ifndef __int8_t_defined
  27. # define __int8_t_defined
  28. typedef signed char int8_t;
  29. typedef short int int16_t;
  30. typedef int int32_t;
  31. # if __WORDSIZE == 64
  32. typedef long int int64_t;
  33. # else
  34. __extension__
  35. typedef long long int int64_t;
  36. # endif
  37. #endif
  38. /* Unsigned.  */
  39. typedef unsigned char uint8_t;
  40. typedef unsigned short int uint16_t;
  41. #ifndef __uint32_t_defined
  42. typedef unsigned int uint32_t;
  43. # define __uint32_t_defined
  44. #endif
  45. #if __WORDSIZE == 64
  46. typedef unsigned long int uint64_t;
  47. #else
  48. __extension__
  49. typedef unsigned long long int uint64_t;
  50. #endif
  51. /* Small types.  */
  52. /* Signed.  */
  53. typedef signed char int_least8_t;
  54. typedef short int int_least16_t;
  55. typedef int int_least32_t;
  56. #if __WORDSIZE == 64
  57. typedef long int int_least64_t;
  58. #else
  59. __extension__
  60. typedef long long int int_least64_t;
  61. #endif
  62. /* Unsigned.  */
  63. typedef unsigned char uint_least8_t;
  64. typedef unsigned short int uint_least16_t;
  65. typedef unsigned int uint_least32_t;
  66. #if __WORDSIZE == 64
  67. typedef unsigned long int uint_least64_t;
  68. #else
  69. __extension__
  70. typedef unsigned long long int uint_least64_t;
  71. #endif
  72. /* Fast types.  */
  73. /* Signed.  */
  74. typedef signed char int_fast8_t;
  75. #if __WORDSIZE == 64
  76. typedef long int int_fast16_t;
  77. typedef long int int_fast32_t;
  78. typedef long int int_fast64_t;
  79. #else
  80. typedef int int_fast16_t;
  81. typedef int int_fast32_t;
  82. __extension__
  83. typedef long long int int_fast64_t;
  84. #endif
  85. /* Unsigned.  */
  86. typedef unsigned char uint_fast8_t;
  87. #if __WORDSIZE == 64
  88. typedef unsigned long int uint_fast16_t;
  89. typedef unsigned long int uint_fast32_t;
  90. typedef unsigned long int uint_fast64_t;
  91. #else
  92. typedef unsigned int uint_fast16_t;
  93. typedef unsigned int uint_fast32_t;
  94. __extension__
  95. typedef unsigned long long int uint_fast64_t;
  96. #endif
  97. /* Types for `void *' pointers.  */
  98. #if __WORDSIZE == 64
  99. # ifndef __intptr_t_defined
  100. typedef long int intptr_t;
  101. #  define __intptr_t_defined
  102. # endif
  103. typedef unsigned long int uintptr_t;
  104. #else
  105. # ifndef __intptr_t_defined
  106. typedef int intptr_t;
  107. #  define __intptr_t_defined
  108. # endif
  109. typedef unsigned int uintptr_t;
  110. #endif
  111. /* Largest integral types.  */
  112. #if __WORDSIZE == 64
  113. typedef long int intmax_t;
  114. typedef unsigned long int uintmax_t;
  115. #else
  116. __extension__
  117. typedef long long int intmax_t;
  118. __extension__
  119. typedef unsigned long long int uintmax_t;
  120. #endif
  121. /* The ISO C99 standard specifies that in C++ implementations these
  122.    macros should only be defined if explicitly requested.  */
  123. #if !defined __cplusplus || defined __STDC_LIMIT_MACROS
  124. # if __WORDSIZE == 64
  125. #  define __INT64_C(c) c ## L
  126. #  define __UINT64_C(c) c ## UL
  127. # else
  128. #  define __INT64_C(c) c ## LL
  129. #  define __UINT64_C(c) c ## ULL
  130. # endif
  131. /* Limits of integral types.  */
  132. /* Minimum of signed integral types.  */
  133. # define INT8_MIN (-128)
  134. # define INT16_MIN (-32767-1)
  135. # define INT32_MIN (-2147483647-1)
  136. # define INT64_MIN (-__INT64_C(9223372036854775807)-1)
  137. /* Maximum of signed integral types.  */
  138. # define INT8_MAX (127)
  139. # define INT16_MAX (32767)
  140. # define INT32_MAX (2147483647)
  141. # define INT64_MAX (__INT64_C(9223372036854775807))
  142. /* Maximum of unsigned integral types.  */
  143. # define UINT8_MAX (255)
  144. # define UINT16_MAX (65535)
  145. # define UINT32_MAX (4294967295U)
  146. # define UINT64_MAX (__UINT64_C(18446744073709551615))
  147. /* Minimum of signed integral types having a minimum size.  */
  148. # define INT_LEAST8_MIN (-128)
  149. # define INT_LEAST16_MIN (-32767-1)
  150. # define INT_LEAST32_MIN (-2147483647-1)
  151. # define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1)
  152. /* Maximum of signed integral types having a minimum size.  */
  153. # define INT_LEAST8_MAX (127)
  154. # define INT_LEAST16_MAX (32767)
  155. # define INT_LEAST32_MAX (2147483647)
  156. # define INT_LEAST64_MAX (__INT64_C(9223372036854775807))
  157. /* Maximum of unsigned integral types having a minimum size.  */
  158. # define UINT_LEAST8_MAX (255)
  159. # define UINT_LEAST16_MAX (65535)
  160. # define UINT_LEAST32_MAX (4294967295U)
  161. # define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615))
  162. /* Minimum of fast signed integral types having a minimum size.  */
  163. # define INT_FAST8_MIN (-128)
  164. # if __WORDSIZE == 64
  165. #  define INT_FAST16_MIN (-9223372036854775807L-1)
  166. #  define INT_FAST32_MIN (-9223372036854775807L-1)
  167. # else
  168. #  define INT_FAST16_MIN (-2147483647-1)
  169. #  define INT_FAST32_MIN (-2147483647-1)
  170. # endif
  171. # define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1)
  172. /* Maximum of fast signed integral types having a minimum size.  */
  173. # define INT_FAST8_MAX (127)
  174. # if __WORDSIZE == 64
  175. #  define INT_FAST16_MAX (9223372036854775807L)
  176. #  define INT_FAST32_MAX (9223372036854775807L)
  177. # else
  178. #  define INT_FAST16_MAX (2147483647)
  179. #  define INT_FAST32_MAX (2147483647)
  180. # endif
  181. # define INT_FAST64_MAX (__INT64_C(9223372036854775807))
  182. /* Maximum of fast unsigned integral types having a minimum size.  */
  183. # define UINT_FAST8_MAX (255)
  184. # if __WORDSIZE == 64
  185. #  define UINT_FAST16_MAX (18446744073709551615UL)
  186. #  define UINT_FAST32_MAX (18446744073709551615UL)
  187. # else
  188. #  define UINT_FAST16_MAX (4294967295U)
  189. #  define UINT_FAST32_MAX (4294967295U)
  190. # endif
  191. # define UINT_FAST64_MAX (__UINT64_C(18446744073709551615))
  192. /* Values to test for integral types holding `void *' pointer.  */
  193. # if __WORDSIZE == 64
  194. #  define INTPTR_MIN (-9223372036854775807L-1)
  195. #  define INTPTR_MAX (9223372036854775807L)
  196. #  define UINTPTR_MAX (18446744073709551615UL)
  197. # else
  198. #  define INTPTR_MIN (-2147483647-1)
  199. #  define INTPTR_MAX (2147483647)
  200. #  define UINTPTR_MAX (4294967295U)
  201. # endif
  202. /* Minimum for largest signed integral type.  */
  203. # define INTMAX_MIN (-__INT64_C(9223372036854775807)-1)
  204. /* Maximum for largest signed integral type.  */
  205. # define INTMAX_MAX (__INT64_C(9223372036854775807))
  206. /* Maximum for largest unsigned integral type.  */
  207. # define UINTMAX_MAX (__UINT64_C(18446744073709551615))
  208. /* Limits of other integer types.  */
  209. /* Limits of `ptrdiff_t' type.  */
  210. # if __WORDSIZE == 64
  211. #  define PTRDIFF_MIN (-9223372036854775807L-1)
  212. #  define PTRDIFF_MAX (9223372036854775807L)
  213. # else
  214. #  define PTRDIFF_MIN (-2147483647-1)
  215. #  define PTRDIFF_MAX (2147483647)
  216. # endif
  217. /* Limits of `sig_atomic_t'.  */
  218. # define SIG_ATOMIC_MIN (-2147483647-1)
  219. # define SIG_ATOMIC_MAX (2147483647)
  220. /* Limit of `size_t' type.  */
  221. # if __WORDSIZE == 64
  222. #  define SIZE_MAX (18446744073709551615UL)
  223. # else
  224. #  define SIZE_MAX (4294967295U)
  225. # endif
  226. /* Limits of `wchar_t'.  */
  227. # ifndef WCHAR_MIN
  228. /* These constants might also be defined in <wchar.h>.  */
  229. #  define WCHAR_MIN __WCHAR_MIN
  230. #  define WCHAR_MAX __WCHAR_MAX
  231. # endif
  232. /* Limits of `wint_t'.  */
  233. # define WINT_MIN (0u)
  234. # define WINT_MAX (4294967295u)
  235. #endif /* C++ && limit macros */
  236. /* The ISO C99 standard specifies that in C++ implementations these
  237.    should only be defined if explicitly requested.  */
  238. #if !defined __cplusplus || defined __STDC_CONSTANT_MACROS
  239. /* Signed.  */
  240. # define INT8_C(c) c
  241. # define INT16_C(c) c
  242. # define INT32_C(c) c
  243. # if __WORDSIZE == 64
  244. #  define INT64_C(c) c ## L
  245. # else
  246. #  define INT64_C(c) c ## LL
  247. # endif
  248. /* Unsigned.  */
  249. # define UINT8_C(c) c ## U
  250. # define UINT16_C(c) c ## U
  251. # define UINT32_C(c) c ## U
  252. # if __WORDSIZE == 64
  253. #  define UINT64_C(c) c ## UL
  254. # else
  255. #  define UINT64_C(c) c ## ULL
  256. # endif
  257. /* Maximal type.  */
  258. # if __WORDSIZE == 64
  259. #  define INTMAX_C(c) c ## L
  260. #  define UINTMAX_C(c) c ## UL
  261. # else
  262. #  define INTMAX_C(c) c ## LL
  263. #  define UINTMAX_C(c) c ## ULL
  264. # endif
  265. #endif /* C++ && constant macros */
  266. #endif /* stdint.h */