前言
不要看错!是C的标准库,不是C++的标准库!最近一直在用C++和C#写东西,第一次用C#写项目,还要不停地在C++和C#之间游走,搞的自己眩 晕…。OO的东西写多了,难免怀念起当初用C写小程序时那简单而快乐的日子,于是决定闲暇之余重温标准C,重拾ACM…
程序写的多了,还是最爱C语言(莫非这才是我想去做嵌入式的真正原因么...)。也许一个优秀的C#程序能让你感受到设计的魅力,但还是灵活的C才能让人 享受语言带来的快乐。当初没好好学的就应该算是C的标准库了,这也让很多同事鄙视自己的C只有业余水平…。既然如此,对C的重温之旅就从C的标准库开始 吧!淘到两本好书:《C语言程序设计:现代方法》(这本书今年好像会出第二版)和《C标准库》,学习之旅就以这两本书为基础了。好,开始…(自我激励 中…)
第零章 初识标准库
1、避免命名冲突
使用标准库要避免自定义宏(比如自己定义NULL)与文件域的声明(比如自己声明size_t类型) 同标准库冲突。对于宏,需要去了解具体的库才行。对于声明,则有以下规则可循:
(1) 不要定义有一个下划线和一个大写字母开头或由两个下划线开头的标识符(貌似C#里面好多人喜欢这么干…).
(2) 不要在函数域以外声明由一个下划线开头的标识符。
(3) 任何具有外部属性的变量名不要由一个下划线开头。
事实上,可能的话,还要避免自己定义的函数与标准库的函数重名。
2、 标准库概述
C语言的标准库按功能被分成了15个部分,每部分都有一个用来 描述的头文件,通过包含相应的头文件就可以使用相应的库函数。这15个标准库的头文件按字母顺序介绍如下:
(1) <assert.h>:诊断
可能是标准库里面最简单的一个库了,熟悉VC的人一定会联想到ASSERT宏,是的,这个库提供的就是断言功能,供大家调试程序用的。
(2) <ctype.h>:字符处理
包括了字符转换和字符分类的函数。
(3) <errno.h>:错误
同样是一个相当简单的库,但却可能是C标准库里面最不受欢迎的一个,它可以返回一个错误码(这是一个左值),用来帮助你在调用某个库函数失败时判断所发生 的错误。
(4) <float.h>:浮点类型特征
提供了用来描述浮点值范围及精度等类型特征的宏,做数值计算的话应该会关注这个库。
(5)<limit.h>:整数类型特征
与<float.h>相对应,提供了用来描述整数类型和字符类型特征的宏。
(6)<locale.h>:区域设置
用来实现包括数字、货币格式、字符集以及日期时间等表示方式的本地化。
(7)<math.h>:数学计算
会C的人有谁没接触过这个库吗?提供了大量的数学计算函数。
(8)<setjmp.h>:非本地跳转
可以绕过正常的函数返回机制从一个函数跳转到另一个函数,很高阶的应用。
(9)<signal.h>:信号处理
可以用来处理中断和运行时异常。
(10)<stdarg.h>:可变实际参数
为函数提供了处理可变参数的工具
(11)<stddef.h>:常用定义
包含了常用的类型及宏定义
(12)<stdio.h>:输入输出
不多说了,提供了大量I/O函数
(13)<stdlib.h>:常用库
内容庞杂,所有无法归入其他库的内容都在这里了...
(14)<string.h>:字符串处理
提供了字符串操作的函数
(15)<time.h>:日期和时间
提供了操纵和显示日期及时间的相关函数
3、学习计划
《C标准库》的序章里面依照对库的掌握程度将C程序员分为了三类:
合格的程序员:<ctype.h>,<stdio.h>,<stdlib.h>,<string.h>
熟练的程序员:<assert.h>,<limits.h>,<stddef.h>,<time.h>
优秀的程序 员:<float.h>,<math.h>,<errno.h>,<local.h>,<setjmp.h>,<signal.h>,<stdarg.h>
学习计划不言自明了吧。