C 标准库系列之概述】的更多相关文章

基本上很多编程语言都会提供针对语言本身的一系列的标准库或者包,当然C语言同样也有提供标准库,C语言的标准库是一系列的头文件的集合:如assert.h.ctype.h.errno.h.float.h.limits.h.locale.h.math.h.setjmp.h.signal.h.stdarg.h.stddef.h.stdio.h.stdlib.h.string.h.time.h等约15个头文件:另外语言只是制定了标准.规范,故目前不同的厂商.系统可能有不同的标准库实现,如GNU的glibc,…
locale.h 区域设置相关,主要针对时间日期.货币格式.字符控制.数字格式等以满足某区域的设置需要. locale设置类别主要包括以下几个宏定义的类别: LC_ALL:设置所有的类别: LC_COLLATE:设置控制整理顺序: LC_CTYPE:设置字符分类: LC_MONETARY:设置货币的格式: LC_NUMERIC:设置数字格式,如小数点后位数: LC_TIME:设置时间日期格式: 某些C标准库实现还提供了其他类型的设置类别扩展,如glibc实现约有12种类型:不过除以上类别外的其他…
errno.h 提供了一个整数全局变量errno,当系统调用或者库函数的错误事件发生时可能会修改该值,指明错误的原因,该值可在任何需要的地方被修改:一般情况不为0的值表示出现了异常或者错误. errno.h中定义了一系列的错误代码,以E开头的宏. glibc中extern int errno来声明定义该错误值:此外其他的E开头的宏EDOM.EILSEQ.ERANGE.EOWNERDEAD等. 微软提供的为一个函数,errno被宏定义#define errno (*_errno()):_errno…
先简单介绍一下<assert.h>头文件,该头文件的目的便是提供一个宏assert的定义,即可以在程序必要的地方使用其进行断言处理:断言在程序中的作用是当在调试模式下时,若程序给出的前提条件没有满足或是没有达到预期预定的条件便会出现断言为假,此时程序会异常终止,调试时会挂在该断言失败处(即结果为false的断言位置)并打印或者显示断言失败的消息. assert函数实际上是一个宏,glibc和微软的c标准库实现均是如此:如glibc的: # define assert(expr) \ ((exp…
limits.h 类似于float.h,其定义了一些列类型的值的范围.限制值,也就是说该类型的值不可以大于该上界或者小于该类型值的下界: glibc中宏定义了一下的值: # define MB_LEN_MAX 16 // 多字节字符的最大字节(byte)数为16位 # define CHAR_BIT 8 // 1个字符所占的字节位数8位 # define SCHAR_MIN (-128) // 一个有符号字符的最小值 # define SCHAR_MAX 127 // 一个有符号字符的最大值 #…
float.h 内部主要包含了一系列的浮点数宏.指明可移植程序必要的常量:浮点数格式一般为Spxbe;其中S表示+-:p表示底数.b表示基数如2.8.10.16等进制,e为指数标识E或e: 在一般情况下可以直接使用该头文件中宏定义的值. glibc下没有专门针对float.h的文件,其一般以stdlib.h或者其他文件替代. 微软的float.h提供了各个浮点数宏,包括要求的最大值.最小值.精度等,其中以DBL开头的宏表示double类型,FLT开头的则float类型的,此外还有LDBL开头的,…
ctype.h 主要提供了一些函数用以测试字符或字符处理的功能函数:包括字符判断检测.字符转换: 目前ASCII字符可分为以下一些类型,如:大写.小写.字母.数字.十六进制.空白字符.可打印字符.控制字符.字母数字.标点符号等,部分类型可能会重叠: ctype.h提供了如下字符处理函数: int isalnum(int c):检查字符是否为数字或字母:(0~9,a~z,A~Z) int isalpha(int c):检查字符是否为字母:(a~z, A~Z) int iscntrl(int c):…
任何程序都会有一些通用的功能需求,对这些需求的实现组成了库.它可以提高程序的复用性.健壮性和可移植性,这也是模块化设计的体现.C规范定义了一些通用接口库,这里只作概述性介绍,具体细节当然还是要查阅规范. 为了提高效率,C的很多库函数会同时有一个宏定义的版本,所以传递参数时尽量使用没有副作用的表达式,以免发生错误.若不想使用宏版本的函数,可以采用三个方法:(1)先undef宏:(2)函数名用括号括起来:(3)不include头文件. // method 1 #include <stdlib.h>…
在开发过程中可能会遇到这样的情况,有一些包是引入自不同地方的,比如: golang.org/x/net/html 和 net/html, golang.org/x/crypto 和 crypto. 那这是什么原因呢? 引用 Go 官方 Wiki 的说法: The golang.org/x/... repositories are part of the Go Project but outside the main Go tree. They are developed under looser…
Go语言内置的log包实现了简单的日志服务.本文介绍了标准库log的基本使用. 使用Logger log包定义了Logger类型,该类型提供了一些格式化输出的方法.本包也提供了一个预定义的"标准"logger,可以通过调用函数Print系列(Print|Printf|Println).Fatal系列(Fatal|Fatalf|Fatalln).和Panic系列(Panic|Panicf|Panicln)来使用,比自行创建一个logger对象更容易使用. 例如,我们可以像下面的代码一样直…