1.12 典型C++环境基础
C++ 系统通常由几个部分组成:程序开发环境、语言和C++标准库。下面介绍图1.1所示的典型C++环境。
C++ 程序通常要经过6个阶段(如图1.1),即编辑(edit)、预处理(Preprocess)、编译(compile)、连接(Link)、装入(load)和执行(excute)。这里主要介绍典型 UNIX C++系统(注意,本书的程序不经修改或稍作修改即可在大多数当前的++系统中运行,包括Microsoft Windows系统)。如果当前使用的不是UNIX系统,可以参看系统手册或向老师请教如何在相应环境中完成这些工作。
第一个阶段是编辑文件,这是用编辑器程序(editor program)完成的。程序员用编辑器输入C++程序,并进行必要的修改。然后将程序存放在磁盘之类的辅助存储设备中。C++程序文件名通常以.cpp、cxx或.C的扩展名结尾(注意C为大写),详见C++环境文档中对文件名扩展的说明。UNIX系统中两个广泛使用的编辑器是vi和emacs。个人计算机上的Borland C++和Microsoft visualC++等C++软件包都有自己的编辑器,它们与编程环境紧密集成。这里,我们假设读者已经知道如何编辑程序。
随后的阶段是程序员发出编译(compile)程序的命令。编译器将C++程序翻译为机器语言代码(也称为目标码)。在C++系统中,预处理程序在编辑器翻译阶段开始之前自动执行。C++预处理器采用预处理指令(Preprocess directive)表示程序编译之前要进行的某些操作。这些操作通常包括在要编译的文件中包括其他文本文件和进行各种文本替换。前面几章将介绍最常见的预处理指令,所有预处理指令的详细介绍见第17章“预处理器”。编辑器在将程序翻译为机器语言代码之前调用预处理器。
下一个阶段是连接。C++程序常常引用其他地方定义的函数,如标准库中或持定项目的程序员使用的专用库。C++编译器产生的目标码通常包含由于缺少一些内容而造成的“空穴”,连接器(1inker)将目标码与这些默认功能的代码连接起来,建立执行程序映像(不再缺少任何代码)。在典型的UNIX系统中,编译和连接C++程序的命令是CC。要编译和连接程序welcom.C,在UNIX提示符下键人:
CC welcome.C
并按Enter键(或Return键)。如果程序编译和连接正确,则产生文件 a.out。这就是 welcome.C 的执行程序映像。
再下一个阶段是装入。执行之前,要先把程序放进内存中,这是由装入器(Loader)完成的,装入器读取磁盘中执行程序的映象文件,并将其放进内存中。
最后,计算机在CPU控制下逐条指令地执行程序。要在UNIX系统中装入并执行程序.可在UNIX提示符下键入a.out并按Return键。
程序不是一次就能够运行。上述每个阶段都可能因为各种错误而失败。例如,可能除数为0(计算机上的非法操作,和算术运算中一样),这会使计算机打印出错信息。然后.程序员需返回编辑阶段,进行必要的修改并继续其余阶段,确定修改之后能否顺利工作。
常见编程错误1.1
如果除数为0之类的错误在程序运行时发生,则称这类错误为运行时错误(run-time error)或执行时错误(execution-time error)。除数为0通常是个致命错误,会使程序立即终止,无法完成工作。非致命错误能让程序运行完毕,但会产生错误结果(注意,在有些系统中.除数为0不是致命借误,详见系统的说明文档)。
C++中的大多数程序都要输入/输出数据。有些C++函数的输入来自cin(标准输人流),通常是键盘,但也可以连接其他输入设备。数据通常输出到co皿(标准输出流).一般是计算机屏幕,但也可以是其他设备。程序打印结果,通常是指在屏幕上显示结果。数据也可以输出到其他设备,如磁盘和硬拷贝打印机。还有称为cerr的标准错误流(standard error stream),通常连接屏幕,用于显示错误消息。用户经常把普通输出数据(即cout)路由到非屏幕设备,而让cerr输出到屏幕,可以立即通知用户发生错误。