1.1.3 库
每次编写程序时,如果总是要从头开始编写,就相当繁琐。在许多程序中,常常需要某种相同的功能,例如从键盘上输入数据,或在屏幕上显示信息,或按照指定的顺序对数据记录排序。为了解决这个问题,编程语言通常提供了大量预先编写好的代码,以执行标准的操作,这样就不必重新编写这些代码了。
可用于任意程序的标准代码都保存在一个库中。编程语言附带的库跟语言本身一样重要,因为库的质量和使用范围对完成某一编程任务所需的时间有非常大的影响。
C++在几乎所有的计算环境中都非常普及:个人电脑、Unix工作站和大型计算机。如果考察一下新编程语言的发展史,就可以看出C++的这种普及率是非常高的。用以前的语言编写的程序量非常大,这无疑会降低对新语言的接受程度。除此以外,大多数专业程序员总是愿意使用他们已熟知的、使用起来得心应手的语言,而不是转而使用新的、不熟悉的语言,花大量的时间来研究其特性。当然,C++是建立在C的基础之上(在C++出现之前,许多环境都使用C语言),这对于C++的普及有很大的帮助,但是C++的流行远不只这一个原因。C++有许多优点:
● C++适用的应用程序范围极广。C++可以用于几乎所有的应用程序,从字处理应用程序到科学应用程序,从操作系统组件到计算机游戏等。
● C++可以用于硬件级别的编程,例如实现设备驱动程序。
● C++从C中继承了过程化编程的高效性,并集成了面向对象编程方式的功能。
● C++在其标准库中提供了大量的功能。
● 有许多商业C++库支持数量众多的操作系统环境和专门的应用程序。
因为几乎所有的计算机都可以使用C++编程,所以C++语言普及到几乎所有的计算机平台上。也就是说,把用C++编写的程序从一台机器迁移到另一台机器上不需要费什么力气。当然,如果这个过程真的非常简单,那么编写在另一台机器上运行的程序时就需要考虑使用C++语言了。
C++的ANSI/ISO标准
C++的国际标准由ISO/IEC 14882文档定义,该文档由美国国家标准协会ANSI发表。读者可以获得该标准的副本,但要记住,该标准主要由编译器编写人员使用,而不是学习该语言的人使用。如果读者不在意这一点,就可以从http://webstore.ansi.org/ansidocstore/default.asp上用合理的费用下载该标准的副本。
标准化是把所编写的程序从一种类型的计算机迁移到另一种类型的计算机上的基础。标准的建立使语言在各种机器上的实现保持一致。在所有相容编程系统上都可用的一组标准功能意味着,用户总是能确定下一步会获得什么结果。C++的ANSI标准不仅定义了语言,还定义了标准库。使用ANSI标准后,C++使应用程序可以轻松地在不同的机器之间迁移,缓解了在多个环境上运行的应用程序的维护问题。
C++的ANSI标准还有另一个优点:它对用C++编程所需要学习的部分进行了标准化。这个标准将使后续的程序具有一致性,因为它只为C++编译器和库提供了一个定义参考。在编写编译器时,该标准的存在也使编写人员不再需要许可。读者在购买遵循ANSI标准的C++编译器时,就知道会得到什么语言和标准库功能。
下面介绍一个非常简单的C++程序,了解C++程序的组成。现在读者不需要输入代码,只是了解一下建立程序的过程。这里也不详细介绍所有的细节,因为这些内容将在后面的章节中探讨。如图1-2所示。
图1-2中所示的程序会显示如下消息:
The best place to start is at the beginning
这个程序不是很有用,但说明了几点。该程序由一个函数main()组成。函数是代码的一个自包含块,用一个名称表示,在本例中是main。程序中还可以有许多其他代码,但每个C++程序至少要包含函数main(),且只能有一个main()函数。C++程序的执行总是从main()中的第一条语句开始。

图1-2 一个简单的C++程序
该函数的第一行语句是:
int main()
这行语句指出,这是函数main的开始。开头的int表示这个函数在执行完后返回一个整数值。因为这是函数main(),所以最初调用它的操作系统会接收这个值。
函数main()包含两个可执行语句,每个语句放在一行上:
cout << "The best place to start is at the beginning";
return 0;
这两个语句会按顺序执行。通常情况下,函数中的语句总是按顺序执行,除非有一个语句改变了执行顺序。第4章将介绍什么类型的语句可以改变执行顺序。
在C++中,输入和输出是使用流来执行的。如果要从程序中输出消息,可以把该消息放在输出流中,如果要输入消息,则把它放在输入流中。因此,流是数据源或数据池的一种抽象表示。在程序执行时,每个流都关联着某个设备,关联着数据源的流就是输入流,关联着数据目的地的就是输出流。对数据源或数据池使用抽象表示的优点是,无论流代表什么,编程都是相同的。例如,从磁盘文件中读取数据的方式与从键盘上读取完全相同。在C++中,标准的输出流和输入流称为cout和cin,在默认情况下,它们分别对应计算机屏幕和键盘。
main()中的第一行代码利用插入运算符<<把字符串The best place to start is at the beginning放在输出流中,从而把它输出到屏幕上。在编写涉及到输入的程序时,应使用提取运算符>>。
头文件包含的代码定义了一组可以在需要时包含在程序源文件中的标准功能。C++标准库中提供的功能存储在头文件中,但头文件不仅仅用于这个目的。我们可以创建自己的头文件,包含自己的代码。在这个程序中,名称cout在头文件iostream中定义。这是一个标准的头文件,它提供了在C++中使用标准输入和输出功能所需要的定义。如果程序不包含下面的代码行:
#include <iostream>
就不会进行编译,因为<iostream>头文件包含了cout的定义,没有它,编译器就不知道cout是什么。这是一个预处理指令,详见本书后面的内容。#include的作用是把<iostream>头文件的内容插入程序源文件中该指令所在的位置。这是在程序编译之前完成的。
提示:
在尖括号和标准头文件名之间没有空格。在许多编译器中,两个尖括号<和>之间的空格是很重要的,如果在这里插入了空格,程序就可能不编译。
函数体中的第二个语句,也是最后一个语句:
return 0;
结束了该程序,把控制权返回给操作系统。它还把值0返回给操作系统。也可以返回其他值,来表示程序的不同结束条件,操作系统还可以利用该值来判断程序是否执行成功。一般情况下,0表示程序正常结束,非0值表示程序不正常结束。但是,非0返回值是否起作用取决于操作系统。
|