<stdint.h> 定义了 int16_t 、 uint32_t 、 int64_t 等整型,在需要确定大小的整型时可以使用它们代替 short 、 unsigned long long 等,在 C 整型中,只使用 int 。适当情况下,推 荐使用标准类型如 size_t 和 ptrdiff_t 。

最常使用的是,对整数来说,通常不会用到太大,如循环计数等,可以使用普通的 int 。 你可以认为 int 至少为 32 位,但不要认为它会多于 32 位,需要 64 位整型的话,可以使用int64_t 或 uint64_t 。对于大整数,使用 int64_t 。

不要使用 uint32_t 等无符号整型,除非你是在表示一个 位组( bit pattern ) 而不是一个 数值。即使数值不会为负值也不要使用无符号类型,使用断言来保护数据。

有些人,包括一些教科书作者,推荐使用无符号类型表示非负数,类型表明了数值取值形 式 。但是,在 C 语言中,这一优点被由其导致的 bugs 所淹没。看看:

for (unsigned int i = foo.Length()-1; i >= 0; --i) 
上述代码永远不会终止!有时 gcc 会发现该 bug 并报警,但通常不会。类似的 bug 还会 出现在比较有符合变量和无符号变量时,主要是 C 的 类型提升机制( type-promotion
scheme , C 语言中各种内建类型之间的提升转换关系) 会致使无符号类型的行为出乎你 的意料。因此,使用断言声明变量为非负数,不要使用无符号型。

以下内容转载自http://apps.hi.baidu.com/share/detail/32935657

[cpp] view plaincopy print?
  1. 按照posix标准,一般整型对应的*_t类型为:
  2. 1字节     uint8_t
  3. 2字节     uint16_t
  4. 4字节     uint32_t
  5. 8字节     uint64_t
按照posix标准,一般整型对应的*_t类型为:
1字节     uint8_t
2字节     uint16_t
4字节     uint32_t
8字节     uint64_t

stdint.h文件如下:

[cpp] view plaincopy print?
  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 */

stdint.h 文件相关推荐

  1. 《C语言》stdint.h 文件

    <stdint.h> 定义了 int16_t . uint32_t . int64_t 等整型,在需要确定大小的整型时可以使用它们代替 short . unsigned long long ...

  2. stm32中stm32f10x_type.h(固件3.0以前)、stm32f10x.h(固件3.0以后)、stdint.h文件的关系

    在stm32f10x的3.5固件库中stm32f10x.h有以下代码(第478行开始): /*** @}*/#include "core_cm3.h" #include " ...

  3. fatal error C1083:无法打开包括文件:“stdint.h”: No such file or directory解决方案

    stdint.h文件是C99的标准头文件,默认情况下VC是不支持的,所以在使用过程中肯定会碰到 "No such file or directory"的问题. 解决办法 1.从网盘 ...

  4. 解决VC2015包含stdint.h头文件冲突问题

    stdint.h是C99的标准,主要用于统一跨平台数据定义. MSVC中不带有这个头文件,直到VS2010. 在之前的版本里面,我们可以: (1)下载这个头文件 download a MS versi ...

  5. freeRTOSConfig.h文件对FreeRTOS进行系统配置

    FreeRTOS内核是高度可定制的,使用配置文件FreeRTOSConfig.h进行定制.每个FreeRTOS应用都必须包含这个头文件,用户根据实际应用来裁剪定制FreeRTOS内核.这个配置文件是针 ...

  6. 解决VC不包含stdint.h头文件问题

    stdint.h是C99的标准,主要用于统一跨平台数据定义. MSVC中不带有这个头文件,直到VS2010(新闻). 在之前的版本里面,我们可以: (1)下载这个头文件 download a MS v ...

  7. fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory

    fatal error C1083: 无法打开包括文件:"stdint.h": No such file or directory [错误]fatal error C1083: 无 ...

  8. kpu.h文件研究(完善中)

    kpu.h文件研究 /* Copyright 2018 Canaan Inc.** Licensed under the Apache License, Version 2.0 (the " ...

  9. stm32f030x8.h文件内容

    第一部分:Configuration of the Cortex-M0 Processor and Core Peripherals 第二部分:中断号列表. 第三部分:包含其他头文件 #include ...

最新文章

  1. 【面试题】Ajax的原理和优缺点总结
  2. 如何查看jar包里的源码
  3. 让架构更简单,QCon上海2016热点前瞻
  4. Angular里的特殊字符ɵ和ABAP变量名里的特殊字符*
  5. Unicode简介【转】
  6. 解决去除“请输入有效值。两个最接近的有效值分别为1和2“提示
  7. 联合国为何 Pick 腾讯?
  8. Android中long类型对应Java/Jni/C++中的类型
  9. 数据库课程设计报告——员工工资管理系统
  10. 你的新电脑会预装什么软件?这些才是你装机必备的全家桶!
  11. Windows下快速删除大量文件
  12. 痞子衡嵌入式:MCUXpresso Config Tools初体验(Pins, Clocks, Peripherals)
  13. 基于SSH的医药管理系统
  14. React Native动画Animated详解
  15. linux设计 实现一个模拟的文件系统,模拟Linux文件系统.doc
  16. linux下安装及使用DNW
  17. 7-25 盲盒包装流水线(标准解法+简洁AC)
  18. 计算机 实验室安全准入制度,实验实训室安全准入制度(试行)
  19. WH-引导名词从句练习题
  20. 危鸡之夜服务器维护,2018热门对战竞技游戏大盘点

热门文章

  1. 计算机二级c语言公共基础知识(免费的) 百度云,计算机二级c语言公共基础知识(免费的).doc...
  2. php 用js 封装,JavaScript使用封装
  3. springboot日志配输出路径配置_SpringBoot日志配置详解
  4. 虚拟邮箱怎么设置方法_腾讯企业邮箱邮件列表白名单设置方法
  5. 最小二乘支持向量机的分析与改进及Python实现
  6. NatureGenetics:所有五个异源四倍体棉花起源被厘清
  7. 如何连动作导入3dmax_教你如何将犀牛(Rhino)模型导入3dmax并进行渲染
  8. 图片流写出 并带数据_IO流阶段---字符流
  9. 二叉树层次遍历python_根据二叉树层序遍历顺序(数组),将其转换为二叉树(Python)...
  10. 跳坑成功,手摸手带你使用PHP连接Oracle数据库