06标准C与字符串文档格式.docx
《06标准C与字符串文档格式.docx》由会员分享,可在线阅读,更多相关《06标准C与字符串文档格式.docx(179页珍藏版)》请在冰豆网上搜索。
前者是为专入门的文科学生设计的,简单易学,至今仍然是业余爱好者的宠物;
后者则是结构化程序设计语言的典范、结构优美,曾被广泛用于计算机教学;
但是,它们的功能有限、灵活性不够、效率也不高,也都不适合于编写系统编程。
附注:
1991年和2002年微软公司的AlanCooper和PaulVick分别开发出VisualBasic和VisualBasic.NET。
1983年Borland公司的AndersHejlsberg和PhilippeKahn开发出TurboPascal、1985年NiklausWirth和苹果公司的LarryTesler又创造了ObjectPascal、1995年Borland公司的AndersHejlsberg等人在其基础上开发出Delphi。
1970年,AT&
T贝尔实验室的KenThompson和DennisRitchie等人在DEC公司的PDP-7小型机上开发出了Unix操作系统,最初的实现是用汇编语言写成的。
为了使Unix操作系统
具有可移植性,迫切需要一种高级语言工具。
为此,(出生在美国纽约的计算机科学家)DennisRitchie以B语言为基础,参考了Algol68,于1972年设计出了C语言。
1973年他们用C语言重写了Unix,1975年又利用C语言将Unix移植到了PDP-11上。
KenThompson(左)与DennisRitchie(右)
2)特点
C语言是一种可移植的系统语言,拥有充分的控制语句和数据结构功能,包含丰富的操作符,从而能够提供强大的表达能力,可以用于许多不同的应用领域。
但是,C语言并不是面向科学家和计算机业余爱好者的,而是专门为程序员设计的。
为了进行高效的系统编程,C语言提供了强大的功能和极大的灵活性。
与其它高级语言相比,C语言的语法简洁、表达自由、库函数丰富。
如果将编程比作造房子,则Fortran和Basic等语言就像一些已经预先造好的大预制件,使用起来简单快捷,但是灵活性差、且功能有限,只能造某些固定模式的房屋;
而C语言就像一块块的小砖,使用起来虽然繁琐,但是灵活性强、而且功能无限,能够造各式各样的建筑物,不过这就要求C语言程序员具有很高的专业水平。
因此,C语言假设使用者都是计算机专家,采取的是程序员负责制。
它不进行完备的类型检查,对数组越界也没有限制。
为了进行高效的系统编程,C语言还提供了指针和指针运算,程序员可以随意操作全部内存,任意修改任何内容。
表达的自由性和操作的任意性,也给C语言带来了很多编程问题和安全隐患。
特别是C语言的++/--运算符和指针运算,更是倍受指责。
与其它高级语言相比,C语言提供了一些低级语言特征,更面向机器。
所以,也有人称C语言是介于高级语言和低级语言之间的一种中级语言。
3)K&
RC
开始的很多年,C语言没有国际标准,只有一个事实标准K&
RC。
直到1989年和1990年,才分别推出了ANSIC和ISOC(C89或C90);
1999年ISO又推出了第2版(C99)。
不像Algol、COBOL和Ada等语言,C语言并不是政府部门或国际组织的产物,而属于个人的作品。
虽然由于C语言性能优越,使用得越来越广泛,但是在最初的十几年间,C语言唯一的“标准”是1978年BrianKemighan和DennisRitchie编写的《C程序设计语言》(TheCProgrammingLanguage)一书,通常称其为K&
RC或经典C。
该书的附录“C参考手册”(CReferenceManual)成为了C语言的实现指南,但是书中缺少对库函数标准的描述,一般以Unix实现的库函数所为事实标准。
说明:
因为C语言的语法成分简单,很多基本功能(例如I/O语句)都是靠库函数来实现的。
所以,C语言比其它高级语言更依赖于库函数。
4)C89/C90标准
1983年ANSI(AmericanNationalStandardsInstitute美国国家标准协会)设立了一个X3J11小组,着手进行C语言的标准化。
并最终于1989年推出ANSIC(ANSIX3.159-1989),1990年它又成为国际标准ISOC(ISO/IEC9899:
1990Programminglanguages–C,程序设计语言——C),原来叫做ANSIC或ISOC,现在通常称其为C89或C90。
标准的指导原则是:
●相信程序员;
●不妨碍程序员做需要完成的事情;
●让语言保持短小简单;
●只提供一种方法来执行一种操作;
●使程序运行速度快,即使不能保证其可移植性。
(不追求定义的抽象统一,更优先考虑运行效率)
这些其实也正是C语言的设计初衷,所以ANSI/ISO的C标准,对原始的C语言修改并不多。
标准C对K&
RC的主要改变是,增加了函数原型(prototype),强调对函数的输入参数进行严格的类型检查;
并补充定义了C语言的标准函数库。
函数原型的类型检查是指:
在编译时,对调用函数的实参和函数定义时的形参的类型是否一致,进行严格的检查。
目的是减少程序纠错的难度(这类问题在运行时很难查出),同时保证运行的安全和稳定性(避免函数调用栈溢出)。
(这也为实现C++函数的参数型多态性提供了条件。
)
例如:
◆K&
RC:
(过时的)
power();
//函数的前向声明
power(x,n)//函数定义
intx,n;
{
……
}
intp=power(3)*power(3.9,5.4);
//使用(编译可通过,运行时产生逻辑错误)
◆C89/C90:
(推荐的)
intpower(intx,intn);
//函数声明1(函数原型)
intpower(int,int);
//函数声明2(函数原型)
intpower(intx,intn)//函数定义
//使用(编译不能通过,错误:
第1个调用
//的参数太少、警告:
第2个调用的参数自动转换为(3,5))
●C89/C90对K&
RC的其它改变有:
⏹删除了关键字:
entry(条目/入口)
⏹增加了关键字:
const(常型变量)、enum(枚举类型)、signed(有符号的,例如signedchar)、void(空/无,可用于函数返回值和形参、通用指针类型)、volatile(易变变量,防止编译器错误的优化)
⏹传递结构:
允许将结构本身作为参数传递给函数(原来只允许传地址)
⏹函数原型:
增加了函数原型(便于编译器进行类型检查)
⏹增加了预处理指令:
#elif(elseif)、#error(错误,强制编译停止)、#line(修改当前行号和源文件名)、#pragma(附注/编译指令,编译器定义的与实现有关的指令)
⏹定义了固有宏:
__LINE__(当前行号)、__FILE__(源文件名)、__DATE__(当前系统日期)、__TIME__(当前系统时间)、__STDC__(标准C版时为1)
5)C99标准
对C90的修订工作开始于1994年,在ISOC++(1998)标准推出之后,ISO又于1999年12月16日,推出了C语言标准的第2版:
ISO/IEC9899:
1999Programminglanguages–C(程序设计语言——C),一般称其为C99。
(1)修订目标
C99保持了C语言的本质特性,C继续是一种短小、清晰和高效的语言。
C99并没有增加新的本质特性,但是为了满足新的需要,也进行很多小的修订。
●C99主要的修订目标有三点:
⏹支持国际化编程,引入了支持国际字符集Unicode的数据类型和库函数;
⏹修正原有版本的明显缺点。
如整数的移植方法,例如int8_t、int16_t、int32_t和int64_t等类型;
⏹针对科学和工程的需要,改进计算的实用性。
例如添加了复数类型和新数学函数。
(2)具体修改
●C99对C89/C90的具体修改有:
⏹增加了C++的//注释风格:
原来C语言之支持多行注释:
/*……*/,C99现在也识别单行注释:
//……
inline(内联函数)、restrict(限制)、_Bool(布尔类型)、_Complex(复数)、_Imaginary(虚数)
◆内联函数(inline):
链接时不是进行函数调用而是嵌入函数体代码(可减少调用的时间开销,适用于要求运行速度快的小型函数)
◆restrict:
只能用于指针,表明该指针是数据对象的唯一且初始的方式(不是通过指针的赋值运算另外来得的),便于编译器进行代码优化。
微软公司VC扩展的restrict,是让编译器限制别名(如用typedef定义的)的使用,必须类型名完全一致(只是类型等价还不够)时,类型检验才能通过
◆_Bool:
布尔类型,为整数类型,一般用1(或非0)表示真、用0表示假。
如果包含了C99新增加的标准库头文件stdbool.h,则可以用bool来代替_Bool,并可使用true和false,从而与标准C++兼容
◆复数和虚数类型:
●如果包含了C99新增加的标准库头文件complex.h后,就可以用complex来代替_Complex、用imaginary来代替_Imaginary
●有三种复数和虚数类型:
float_Complex、double_Complex、longdouble_Complex;
float_Imaginary、double_Imaginary、longdouble_Imaginary
●在C99内部,是用二元数组来实现复数的,第一个数组元素为实部、第二个数组元素为虚部
●可以用实数和(定义在complex.h中的)I来初始化一个复变量。
#include<
complex.h>
doublecomplexz=6.0–8.5*I,w=3.0,u=4.0*I;
C99的关键字(Keywords)(共37个)