有关stdint.h 文件

Google C++编程规范的P25页有如下叙述:

<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

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

stdint.h文件如下:

    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. 在windows下使用pip安装python包遇到缺失stdint.h文件的错误

    今天在windows上使用pip安装一个python包python-lzf时遇到如下的错误: fatal error C1083: Cannot open include file: 'stdint. ...

  2. stdint.h 文件 int8_t uint8_t int16_t uint16_t

    http://blog.chinaunix.net/uid-26588712-id-3068151.html c++ 数据类型 按照posix标准,一般整型对应的*_t类型为:1字节     uint ...

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

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

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

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

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

    stdint.h是c99标准的头文件,vc不支持,所以肯定会提示“No such file or directory”的. stdint.h是C99的标准,主要用于统一跨平台数据定义. MSVC中不带 ...

  6. #include <stdint.h>

    stdint.h是c99中引进的一个标准C库的头文件. #include<stdio.h> #include<stdint.h> main() { /* 数据类型可以跨平台移植 ...

  7. 最新版的stm32f1xx.h文件中取消了u8, u16, u32的类型定义

    使用芯片stm32f103zet6和stm32l151c8t6,在移植程序时发现,编译器提示u8未定义: 在Keil MDK 开发环境里,st定义无符号32位整形数据有很多种表示方法: 1 unsig ...

  8. .lib文件 .h文件 .dll文件

    .lib代表的是静态数据连接库,在windows系统中起到链接程序和函数的作用,存放的是函数的是函数调用的信息,是obj文件的集合.相当于linux中的.a或.0. .so文件.lib文件是不对外公开 ...

  9. 对于.h文件和.c文件

    C语言中.h文件和.c文件详细解析_云止水_新浪博客http://blog.sina.com.cn/s/blog_73006d600102wcx5.html

随机推荐

  1. TCP/UDP,SOCKET网络通信,C++/Java实现

    趁这两天没事干,就把网络通信这一块搞一搞,C/S方面的了解一下,很重要! TCP Server/Client

  2. A+B

    Problem Description Calculate A + B. Input Each line will contain two integers A and B. Process to e ...

  3. [转]oracle数据类型和对应的java类型

    地址: http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/datacc.htm ...

  4. iOS开发小技巧--计算label的Size的方法总结

    计算label的Size方法 sizeWithAttributes:方法 适用于不换行的情况,宽度不受限制的情况 /// 根据指定文本和字体计算尺寸 - (CGSize)sizeWithText:(N ...

  5. iPad开发--QQ空间,处理横竖屏布局,实现子控件中的代理

    一.主界面横竖屏效果图 二.主界面加载, 初始化Dock(红色框的控件),判断程序启动时的屏幕方向.调用自己- (void)transitionToLandScape:(BOOL)isLandScap ...

  6. 【BZOJ 2693】jzptab

    莫名其妙地又卡在long long上了,我果然又在同一个地方犯逗. 在“在路上,同梦行”群里闹了个大笑话QAQ #include<cstdio> #include<cstring&g ...

  7. windows-msconfig

    弹出输入框,输入命令msconfig 打开系统配置,查看相关引导信息,关闭开机启动等

  8. Jquery-选择框点击勾选或者取消

    1:单选框,直接定位到属性名称 $(document).ready(function(){ var old = null; //用来保存原来的对象 $("input[name='sex']& ...

  9. 【HDU 3746】Simpsons’ Hidden Talents(KMP求循环节)

    求next数组,(一般有两种,求循环节用的见代码)求出循环节的长度. #include <cstdio> #define N 100005 int n,next[N]; char s[N] ...

  10. 【转】ListView学习笔记(一)——缓存机制

    要想优化ListView首先要了解它的工作原理,列表的显示需要三个元素:ListView.Adapter.显示的数据: 这里的Adapter就是用到了适配器模式,不管传入的是什么View在ListVi ...