C 标准库源码解剖.pdf

  1. 1、本文档被系统程序自动判定探测到侵权嫌疑,本站暂时做下架处理。
  2. 2、如果您确认为侵权,可联系本站左侧在线QQ客服请求删除。我们会保证在24小时内做出处理,应急电话:400-050-0827。
  3. 3、此文档由网友上传,因疑似侵权的原因,本站不提供该文档下载,只提供部分内容试读。如果您是出版社/作者,看到后可认领文档,您也可以联系本站进行批量认领。
查看更多
C 标准库源码解剖.pdf

C (01) C (01) CC标准库源码解剖((0011)):类型相关的定义 说明:整个C 标准库解剖系列环境为Ubuntu 8.04,编译器为gcc 4.2.4,由于linux 系统中只有C 标准库的 头文件(在/usr/include 下),函数库被编译成了程序库,没有源代码,因此对源代码的解剖用的是glibc 2.9, 可从GNU 的官方站点上下载。 类型相关定义包括limits.h、float.h、stddef.h、stdbool.h、stdarg.h、iso646.h、stdint.h 共7个头文件。 除了stdint.h 外,其余6 个文件在gcc 编译器的/usr/lib/gcc/i486-linux-gnu/4.2.4/include 目录下。stdint.h 在 /usr/include 中,是C99 中引入的,提供了扩展整数的基本定义,放到后面再解剖吧。 1 limits.h 1 limits.h 11、lliimmiittss..hh:定义了整数类型的范围。/usr/include 下也有limits.h,它会自己先定义各个整数类型范围, 这样当不用gcc 来构建你的程序时就可以使用这些值。如果使用gcc 编译器来构建你的程序,则会使用gcc 编译器自己的limits.h(前面的定义都会#undef 掉)。由于这个limits.h 会用到gcc 内置的limits.h,因此我们 解剖/usr/include 下的limits.h。 1. /* ISO C99 Standard: 7.10/5.2.4.2.1 整数类型的大小 limits.h */ 2. #ifndef _LIBC_LIMITS_H_ 3. #define _LIBC_LIMITS_H_ 1 4. #include features.h /* 选项的宏,如ISOC99 选项、POSIX 选项、XOPEN 选项等 */ 5. #define MB_LEN_MAX 16 /* 支持区域设置的多字节字符宽度为16 位 */ 6. /* 不使用GNU CC 时就必须定义下面所有符号,否则使用gcc 编译器中的定义(看下面) */ 7. #if !defined __GNUC__ || __GNUC__ 2 8. # ifndef _LIMITS_H 9. # define _LIMITS_H 1 10. #include bits/wordsize.h /* 定义了表示字的位数的__WORDSIZE 宏,64 位平台上值为64,32 位平台上值为 32 */ 11. # define CHAR_BIT 8 /* char 类型的宽度为8 位 */ 12. # define SCHAR_MIN (-128) /* signed char 的最小值为-2^7,补码表示没有对应的正数,其 反数还是自己 */ 13. # define SCHAR_MAX 127 /* signed char 的最大值为2^7-1*/ 14. # define UCHAR_MAX 255 /* unsigend char 的最大值为2^8-1最小值为0) */ 15. # ifdef __CHAR_UNSIGNED__ /* 根据预定义宏来确定是让char=unsigned char 还是 char=signed char */ 16. # define CHAR_MIN 0 17. # define CHAR_MAX UCHAR_MAX 18. # else 19. # define CHAR_MIN SCHAR_MIN /* gcc 中使用了这个,即char=signed char */ 20. # define CHAR_MAX SCHAR_MAX 21. # endif 22. # define SHRT_MIN (-32768) /* signed short int 的最小值为-2^15 */ 23. # define SHRT_MAX 32767 /* signed short int 的最小值为2^15-1 */

您可能关注的文档

文档评论(0)

tangtianbao1 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档