有关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
- 按照posix标准,一般整型对应的*_t类型为:
- 1字节 uint8_t
- 2字节 uint16_t
- 4字节 uint32_t
- 8字节 uint64_t
stdint.h文件如下:
- /* Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
- /*
- * ISO C99: 7.18 Integer types <stdint.h>
- */
- #ifndef _STDINT_H
- #define _STDINT_H 1
- #include <features.h>
- #include <bits/wchar.h>
- #include <bits/wordsize.h>
- /* Exact integral types. */
- /* Signed. */
- /* There is some amount of overlap with <sys/types.h> as known by inet code */
- #ifndef __int8_t_defined
- # define __int8_t_defined
- typedef signed char int8_t;
- typedef short int int16_t;
- typedef int int32_t;
- # if __WORDSIZE == 64
- typedef long int int64_t;
- # else
- __extension__
- typedef long long int int64_t;
- # endif
- #endif
- /* Unsigned. */
- typedef unsigned char uint8_t;
- typedef unsigned short int uint16_t;
- #ifndef __uint32_t_defined
- typedef unsigned int uint32_t;
- # define __uint32_t_defined
- #endif
- #if __WORDSIZE == 64
- typedef unsigned long int uint64_t;
- #else
- __extension__
- typedef unsigned long long int uint64_t;
- #endif
- /* Small types. */
- /* Signed. */
- typedef signed char int_least8_t;
- typedef short int int_least16_t;
- typedef int int_least32_t;
- #if __WORDSIZE == 64
- typedef long int int_least64_t;
- #else
- __extension__
- typedef long long int int_least64_t;
- #endif
- /* Unsigned. */
- typedef unsigned char uint_least8_t;
- typedef unsigned short int uint_least16_t;
- typedef unsigned int uint_least32_t;
- #if __WORDSIZE == 64
- typedef unsigned long int uint_least64_t;
- #else
- __extension__
- typedef unsigned long long int uint_least64_t;
- #endif
- /* Fast types. */
- /* Signed. */
- typedef signed char int_fast8_t;
- #if __WORDSIZE == 64
- typedef long int int_fast16_t;
- typedef long int int_fast32_t;
- typedef long int int_fast64_t;
- #else
- typedef int int_fast16_t;
- typedef int int_fast32_t;
- __extension__
- typedef long long int int_fast64_t;
- #endif
- /* Unsigned. */
- typedef unsigned char uint_fast8_t;
- #if __WORDSIZE == 64
- typedef unsigned long int uint_fast16_t;
- typedef unsigned long int uint_fast32_t;
- typedef unsigned long int uint_fast64_t;
- #else
- typedef unsigned int uint_fast16_t;
- typedef unsigned int uint_fast32_t;
- __extension__
- typedef unsigned long long int uint_fast64_t;
- #endif
- /* Types for `void *' pointers. */
- #if __WORDSIZE == 64
- # ifndef __intptr_t_defined
- typedef long int intptr_t;
- # define __intptr_t_defined
- # endif
- typedef unsigned long int uintptr_t;
- #else
- # ifndef __intptr_t_defined
- typedef int intptr_t;
- # define __intptr_t_defined
- # endif
- typedef unsigned int uintptr_t;
- #endif
- /* Largest integral types. */
- #if __WORDSIZE == 64
- typedef long int intmax_t;
- typedef unsigned long int uintmax_t;
- #else
- __extension__
- typedef long long int intmax_t;
- __extension__
- typedef unsigned long long int uintmax_t;
- #endif
- /* The ISO C99 standard specifies that in C++ implementations these
- macros should only be defined if explicitly requested. */
- #if !defined __cplusplus || defined __STDC_LIMIT_MACROS
- # if __WORDSIZE == 64
- # define __INT64_C(c) c ## L
- # define __UINT64_C(c) c ## UL
- # else
- # define __INT64_C(c) c ## LL
- # define __UINT64_C(c) c ## ULL
- # endif
- /* Limits of integral types. */
- /* Minimum of signed integral types. */
- # define INT8_MIN (-128)
- # define INT16_MIN (-32767-1)
- # define INT32_MIN (-2147483647-1)
- # define INT64_MIN (-__INT64_C(9223372036854775807)-1)
- /* Maximum of signed integral types. */
- # define INT8_MAX (127)
- # define INT16_MAX (32767)
- # define INT32_MAX (2147483647)
- # define INT64_MAX (__INT64_C(9223372036854775807))
- /* Maximum of unsigned integral types. */
- # define UINT8_MAX (255)
- # define UINT16_MAX (65535)
- # define UINT32_MAX (4294967295U)
- # define UINT64_MAX (__UINT64_C(18446744073709551615))
- /* Minimum of signed integral types having a minimum size. */
- # define INT_LEAST8_MIN (-128)
- # define INT_LEAST16_MIN (-32767-1)
- # define INT_LEAST32_MIN (-2147483647-1)
- # define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1)
- /* Maximum of signed integral types having a minimum size. */
- # define INT_LEAST8_MAX (127)
- # define INT_LEAST16_MAX (32767)
- # define INT_LEAST32_MAX (2147483647)
- # define INT_LEAST64_MAX (__INT64_C(9223372036854775807))
- /* Maximum of unsigned integral types having a minimum size. */
- # define UINT_LEAST8_MAX (255)
- # define UINT_LEAST16_MAX (65535)
- # define UINT_LEAST32_MAX (4294967295U)
- # define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615))
- /* Minimum of fast signed integral types having a minimum size. */
- # define INT_FAST8_MIN (-128)
- # if __WORDSIZE == 64
- # define INT_FAST16_MIN (-9223372036854775807L-1)
- # define INT_FAST32_MIN (-9223372036854775807L-1)
- # else
- # define INT_FAST16_MIN (-2147483647-1)
- # define INT_FAST32_MIN (-2147483647-1)
- # endif
- # define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1)
- /* Maximum of fast signed integral types having a minimum size. */
- # define INT_FAST8_MAX (127)
- # if __WORDSIZE == 64
- # define INT_FAST16_MAX (9223372036854775807L)
- # define INT_FAST32_MAX (9223372036854775807L)
- # else
- # define INT_FAST16_MAX (2147483647)
- # define INT_FAST32_MAX (2147483647)
- # endif
- # define INT_FAST64_MAX (__INT64_C(9223372036854775807))
- /* Maximum of fast unsigned integral types having a minimum size. */
- # define UINT_FAST8_MAX (255)
- # if __WORDSIZE == 64
- # define UINT_FAST16_MAX (18446744073709551615UL)
- # define UINT_FAST32_MAX (18446744073709551615UL)
- # else
- # define UINT_FAST16_MAX (4294967295U)
- # define UINT_FAST32_MAX (4294967295U)
- # endif
- # define UINT_FAST64_MAX (__UINT64_C(18446744073709551615))
- /* Values to test for integral types holding `void *' pointer. */
- # if __WORDSIZE == 64
- # define INTPTR_MIN (-9223372036854775807L-1)
- # define INTPTR_MAX (9223372036854775807L)
- # define UINTPTR_MAX (18446744073709551615UL)
- # else
- # define INTPTR_MIN (-2147483647-1)
- # define INTPTR_MAX (2147483647)
- # define UINTPTR_MAX (4294967295U)
- # endif
- /* Minimum for largest signed integral type. */
- # define INTMAX_MIN (-__INT64_C(9223372036854775807)-1)
- /* Maximum for largest signed integral type. */
- # define INTMAX_MAX (__INT64_C(9223372036854775807))
- /* Maximum for largest unsigned integral type. */
- # define UINTMAX_MAX (__UINT64_C(18446744073709551615))
- /* Limits of other integer types. */
- /* Limits of `ptrdiff_t' type. */
- # if __WORDSIZE == 64
- # define PTRDIFF_MIN (-9223372036854775807L-1)
- # define PTRDIFF_MAX (9223372036854775807L)
- # else
- # define PTRDIFF_MIN (-2147483647-1)
- # define PTRDIFF_MAX (2147483647)
- # endif
- /* Limits of `sig_atomic_t'. */
- # define SIG_ATOMIC_MIN (-2147483647-1)
- # define SIG_ATOMIC_MAX (2147483647)
- /* Limit of `size_t' type. */
- # if __WORDSIZE == 64
- # define SIZE_MAX (18446744073709551615UL)
- # else
- # define SIZE_MAX (4294967295U)
- # endif
- /* Limits of `wchar_t'. */
- # ifndef WCHAR_MIN
- /* These constants might also be defined in <wchar.h>. */
- # define WCHAR_MIN __WCHAR_MIN
- # define WCHAR_MAX __WCHAR_MAX
- # endif
- /* Limits of `wint_t'. */
- # define WINT_MIN (0u)
- # define WINT_MAX (4294967295u)
- #endif /* C++ && limit macros */
- /* The ISO C99 standard specifies that in C++ implementations these
- should only be defined if explicitly requested. */
- #if !defined __cplusplus || defined __STDC_CONSTANT_MACROS
- /* Signed. */
- # define INT8_C(c) c
- # define INT16_C(c) c
- # define INT32_C(c) c
- # if __WORDSIZE == 64
- # define INT64_C(c) c ## L
- # else
- # define INT64_C(c) c ## LL
- # endif
- /* Unsigned. */
- # define UINT8_C(c) c ## U
- # define UINT16_C(c) c ## U
- # define UINT32_C(c) c ## U
- # if __WORDSIZE == 64
- # define UINT64_C(c) c ## UL
- # else
- # define UINT64_C(c) c ## ULL
- # endif
- /* Maximal type. */
- # if __WORDSIZE == 64
- # define INTMAX_C(c) c ## L
- # define UINTMAX_C(c) c ## UL
- # else
- # define INTMAX_C(c) c ## LL
- # define UINTMAX_C(c) c ## ULL
- # endif
- #endif /* C++ && constant macros */
- #endif /* stdint.h */
有关stdint.h 文件的更多相关文章
- 在windows下使用pip安装python包遇到缺失stdint.h文件的错误
今天在windows上使用pip安装一个python包python-lzf时遇到如下的错误: fatal error C1083: Cannot open include file: 'stdint. ...
- stdint.h 文件 int8_t uint8_t int16_t uint16_t
http://blog.chinaunix.net/uid-26588712-id-3068151.html c++ 数据类型 按照posix标准,一般整型对应的*_t类型为:1字节 uint ...
- fatal error C1083:无法打开包括文件:“stdint.h”: No such file or directory解决方案
stdint.h文件是C99的标准头文件,默认情况下VC是不支持的,所以在使用过程中肯定会碰到 "No such file or directory"的问题. 解决办法 1.从网盘 ...
- freeRTOSConfig.h文件对FreeRTOS进行系统配置
FreeRTOS内核是高度可定制的,使用配置文件FreeRTOSConfig.h进行定制.每个FreeRTOS应用都必须包含这个头文件,用户根据实际应用来裁剪定制FreeRTOS内核.这个配置文件是针 ...
- fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory
stdint.h是c99标准的头文件,vc不支持,所以肯定会提示“No such file or directory”的. stdint.h是C99的标准,主要用于统一跨平台数据定义. MSVC中不带 ...
- #include <stdint.h>
stdint.h是c99中引进的一个标准C库的头文件. #include<stdio.h> #include<stdint.h> main() { /* 数据类型可以跨平台移植 ...
- 最新版的stm32f1xx.h文件中取消了u8, u16, u32的类型定义
使用芯片stm32f103zet6和stm32l151c8t6,在移植程序时发现,编译器提示u8未定义: 在Keil MDK 开发环境里,st定义无符号32位整形数据有很多种表示方法: 1 unsig ...
- .lib文件 .h文件 .dll文件
.lib代表的是静态数据连接库,在windows系统中起到链接程序和函数的作用,存放的是函数的是函数调用的信息,是obj文件的集合.相当于linux中的.a或.0. .so文件.lib文件是不对外公开 ...
- 对于.h文件和.c文件
C语言中.h文件和.c文件详细解析_云止水_新浪博客http://blog.sina.com.cn/s/blog_73006d600102wcx5.html
随机推荐
- 关于web前端的学习路线
第一阶段: HTML+CSS:HTML进阶.CSS进阶.div+css布局.HTML+css整站开发. JavaScript基础:Js基础教程.js内置对象常用方法.常见DOM树操作大全.ECMAsc ...
- js-函数eval
eval函数接收一个参数s,如果s不是字符串,则直接返回s.否则执行s语句.如果s语句执行结果是一个值,则返回此值,否则返回undefined. 需要特别注意的是对象声明语法“{}”并不能返回一个值, ...
- APP的缓存文件到底应该存在哪?看完这篇文章你应该就自己清楚了
APP的缓存文件到底应该存在哪?看完这篇文章你应该就自己清楚了 彻底理解android中的内部存储与外部存储 存储在内部还是外部 所有的Android设备均有两个文件存储区域:"intern ...
- 关于IOS显示图片的一些注意事项
1.-568h 的图片只能在def.png显示,其他的都不支持. 2.在加载图片到Images.xcassets里面的时候,如果图片下面出现Unassigned这个时候这个图片就不能用,得拿到Imag ...
- [NOIP2014] 提高组 洛谷P1328 生活大爆炸版石头剪刀布
题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负.在<生活大爆炸>第二季第8 集中出现了一种石头剪刀布的升级版游戏. 升级版游戏在传统的 ...
- Linux inode && Fast Directory Travel Method(undone)
目录 . Linux inode简介 . Fast Directory Travel Method 1. Linux inode简介 0x1: 磁盘分割原理 字节 -> 扇区(sector)(每 ...
- HDU 5920 Ugly Problem
说起这道题, 真是一把辛酸泪. 题意 将一个正整数 \(n(\le 10^{1000})\) 分解成不超过50个回文数的和. 做法 构造. 队友UHC提出的一种构造方法, 写起来比较方便一些, 而且比 ...
- 常用RSS订阅地址
随着Google Reader关门大吉,转战鲜果网了,RSS订阅地址经过几次折腾,丢的没剩几个了,写个文章记录一下吧,随时补充. --PS-- ,微信.微博之类的是社交平台,不能很好的梳理知识,一直用 ...
- primefaces p:tableData 显示 List<List>
@javax.faces.bean.ViewScoped public class Controlador { private List<List> estadistico; @PostC ...
- 通过rsync搭建一个远程备份系统(一)
前言 我公司是电子商务公司,全部是linux系统,每天的网站数都在增加,为了保证安全,需要建立一个远程容灾系统,将网站数据每天凌晨1点备份到远程服务器上,由于数据量大,每天进行进行增量备份,仅仅备份当 ...