C语言参考手册

来源:互联网 发布:看图的软件 编辑:程序博客网 时间:2024/06/06 00:18

有人都说C比较难,我看不怎么难;可能就是C语言接触到的底层太多了,所以感到有点难了,但这也不是什么坏处,正是体现了C语言的优越之处:我们的权限更大,写出的程序在性能上更好!


由于这个原因,再加上自己也想有个总结性的C参考手册,原本打算自己根据C标准(C89、C99)整理一下C语言的,可谁知竟然发现这个工作早在27年前就有人已经做过了,而且做的特别好!这个人就是Samuel P. Harbison III!真让人汗颜!


《C语言参考手册(第五版)》(作者:Samuel P. Harbison III和Guy L. Steele Jr),有两个译本:一个是邱仲潘译的(2003年),一个是徐波译的(2008年)。这本书基本上可以取代现在任何一本C语言书(对于入门的人除外),甚至是可以取代C标准(C89、C95、C99)(这不是不需要C标准,而是你可以不用再看、查C标准)。该书中包括了传统C(C89以前的C)、C89、C95、C99,并介绍了C与C++的对接。


C语言的演变


传统C语言


最初的C语言描述出现在Brian Kernighan与Dennis Ritchie(通常合称为“K&R”,他们也是UNIX系统的创造者)的著作《The C Programming Language》第1版(Prentice-Hall, 1978)。此书出版后,这个语言不断有比细小的演变,增加或删除了一些我。我们把20世纪80年代初公认的C语言定义称为传统C语言,是标准化之前的方言。当然,各个C语言提供商也对传统C语言进行了各种扩展。


标准C语言(1989)


1982年,美国国家标准协会(ANSI)认识到标准化将有助于C语言在商业化编程中的普及,因此成立了一个委员会来为C语言及其运行库制定标准。这个委员会,即X3J11(现在为NCTTS  J11)的主席是Jim Brodie,它制定了一个标准并在1989年被正式采用,即美国国家标准X3.159-1989或称作“ANSI C”。


考虑到编程活动是国际化的,因此完成ANSI C语言之后,成立了一个国际标准化组织ISO/IEC  JTC1/SC22/WG14,在P.J Plauger(曾出版《C标准库》——是基于C89的,现为ISO C++标准委员会主席)的领导下,只作了少量编辑性修改,即把ANSI标准变成了国际标准ISO/IEC 9899:1990.此后,ISO/IEC标准被ANSI采用,人们把这个公共标准称为“标准C语言”。由于这个标准后来又有了变化,因此我们称为其为“标准C语言(1989)或简称”C89“。


传统C语言到C89的改变包括:


增加了真正的标准库

新的预处理器命令与特性

函数原型允许在函数声明中指定参数类型

一些新关键字,包括const、volatile与signed(注:一些国内教材(如谭浩强的《C程序设计》)讲解的语法大部分都是沿用传统C,对C标准的新特性提都没提)

宽字符、宽字符串和多字节字符

对约定规则、声明和类型检查的许多小改动与澄清


标准C语言(1995)


作为对C语言标准的正常维护工作,WG14对C89作了两处技术修订(缺陷修复)和一个补充(扩展)。总的来看,尤其是通过增加新的库函数,以上这些工作对C语言标准进行了相对合适的修改,得到的结果我们称之为“C89增补1”或“C95”。C95对C89所作的改变包括:


3个新的标准库头文件iso646.h、wctype.h与wchar.h

几个新的记号和宏,用于替换一些国家的字符集中没有的运算符和标点符号(这些在头文件iso646.h中定义)

printf/scanf系列函数的一些新格式代码

大量新函数和一些类型与常量,用于多字节字符和宽字符


标准C语言(1999)


ISO/IEC标准都需要经常进行审查和更新。1995年,WG14开始对C语言标准作更大的修订,最终于1999年完成并获批准。新标准ISO/IEC 9899:1990或“C99”取代原有的标准(及所有修订与补充),成为正式标准C语言。提供商根据新标准更新各自的C语言函数库和编译器。


C99在C89/C95语言和库函数中增加了许多新特性,包括:


复数运算

扩展整数类型,包括长标准类型(如long long int,  unsinged long long int,  long long double等等)

变长数组(在C89中,变长长度不支持变量;在C99获得允许)

布尔数组

布尔类型

对非英语字符集更好的支持

对浮点数类型更好的支持,包括所有类型的数学函数

C++风格的注释(//)


C99的改动比C95更大,包括语言的改变和函数库的扩展。C99标准文档比C89文档大得多(C89的中文版(GB/T 15272-94)有195页,C99英文版有540左右)。但是,改变还是“本着C语言精神”进行的,语言的基本性质没有改变。


C编译器的选择


有很多人推荐选择VC6.0,实在不明白他们推荐这款编译器有什么目的。本人不建议初学者用这款编译器,一个显著的理由是VC6.0已经开发10多年了,关键的是从那时到现在,微软一直没有更新这款编译器(好像已经放弃了它的开发),而是维护着VC2008。由于以上原因,VC6.0远远不支持C标准了,据有人测试,VC6.0对C++标准的支持最高才是70%,想想C++标准第一次发布是在1998年,而现在已经10多年过去了,VC6.0还能符合标准吗?一个重要的例子,就是for循环的作用域问题,VC6.0在设计时就是个缺陷。


如果还想用微软的产品,你可以使用VC2005或VC2008,据微软公布VC2008支持C++标准达到98%(不知是真是假)。


在这里笔者推荐你用GCC编译器,GCC是开源的、跨平台的,基本上在目前主流的平台上都能使用GCC;而且你也可以拿到GCC编译器的源代码。至于其他的理由,你可以上百度、谷歌上搜搜。


GCC编译器原本上是命令行界面的,如果在Windows下,可以使用DEV-C++,GCC编译在Windows下的图形化界面,而且小巧灵珑(只有9M左右),相比旁大的VC(VC2008有几个G),DEV-C++是你很好的选择。
原创粉丝点击