6.8 标准库函数
标准库函数是ANSI C语言标准的一个重要组成部分。在ANSI C标准之前,不同的C系统都提供了库,其中包含许多常用功能函数,以及相关的类型与变量定义。随着发展,不同C系统所提供的库之间的差异也逐渐显露出来。为了提高C程序在不同系统之间的可移植性,ANSI C标准将库的标准化作为一项重要工作,最终结果就是这里要讨论的标准库。
如果我们写的程序中只使用了标准库,那么这个程序就更容易移到另一C语言系统上,甚至移到另一种计算机上使用。如果在程序里使用了系统的扩充库,那么要将这样的程序搬到其他系统里使用,就需要做更多工作,需要修改所有使用特殊库的部分,将它们用新系统能够支持的方式重新写出来。
因此,在开发C程序时,应当尽可能使用C语言本身的功能和标准库。如果迫不得已必须使用具体C系统的特殊库功能,那么就应该尽量将依赖于特殊功能的程序片段封装到一些小局部中。这种做法能保证最终程序具有较好的可移植性,在将程序转到其他系统时,需要做的工作仅仅是修改小局部中的代码。
标准库通常包含了一组标准头文件和一个或几个库函数代码文件。有关标准头文件的情况前面已有很多讨论,在写C程序时,我们只需用 #include预处理命令引入相关头文件,就可以保证程序里能够正确使用标准库功能了。
库代码文件里主要是各个标准函数的实际机器指令代码段,还有一些相关数据结构(一些实现标准库所需的变量等),可能还附带着一些为连接程序使用的信息。当然,库文件都是二进制代码文件,其具体内容和形式都不是我们需要关心的。如果在一个程序中用到某些标准函数,在程序连接时,连接程序就会从库代码文件里提取出有关函数的代码和其他相关片段,把它们拼接到结果程序里,并完成所有调用的连接。
库代码文件通常是一个或者几个很大的文件,其中包含了所有库函数的定义。而在我们的一个具体程序里,实际使用的库功能只是其中很少一部分。人们开发了这样的技术,在进行程序连接时,连接程序并不把库代码文件整个装配到可执行文件里,而是根据实际程序的需要,由库文件里提取出那些必要部分,只把这些部分装配进去。这样就保证了用户程序的紧凑性,避免程序中出现大量无用冗余代码段。
标准头文件在ANSI C语言定义里有明确规定。这是一组正文文件,它们的作用就是为使用标准库函数的源程序提供信息。在这些头文件里列出了各个库函数的原型,定义了库函数所使用的有关类型(如表示文件流的FILE结构类型等)和一些符号常量(如NULL)。通过预处理命令包含这些头文件,将使编译程序在处理我们的程序时能得到所有必要的信息,这就可以保证程序中对标准库的使用与库文件里有关定义之间的一致性。
标准头文件通常存放在C语言系统的主目录下的一个子目录里,这个目录的名字一般是include或inc。下面将根据ANSI C标准库的头文件,从功能角度分门别类介绍标准库函数。
(1)字符类型函数
用于对字符按ASCII码分类:字母,数字,控制字符,分隔符,大小写字母等。
(2)转换函数
用于字符或字符串的转换;在字符量和各类数字量(整型,实型等)之间进行转换;在大、小写之间进行转换。
(3)目录路径函数
用于文件目录和路径操作。
(4)诊断函数
用于内部错误检测。
(5)图形函数
用于屏幕管理和各种图形功能。
(6)输入输出函数
用于完成输入输出功能。
(7)接口函数
用于与DOS、BIOS和硬件的接口。
(8)字符串函数
用于字符串操作和处理。
(9)内存管理函数
用于内存管理。
(10)数学函数
用于数学函数计算。
(11)日期和时间函数
用于日期、时间转换操作。
(12)进程控制函数
用于进程管理和控制。
(13)其他函数
用于其他各种功能。
常见的编程错误6.5
函数调用时传递不正确的数据类型。当调用函数时,传递给它的值必须与这个函数定义时的参数一致。
遗漏被调用函数的原型。
用分号终止函数首部行。
忘记在函数首部行中列出参数所包含的数据类型。
从函数返回的数据类型与函数首部行中指定的数据类型不符。
当定义一个指针为函数形参数时,忘记在函数被调用时传递的实参数前放置地址运算符。
定义递归函数时忘记指定递归的终止条件。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。