1.2 第一个C++程序
一个程序是由若干个程序源文件组成的。为了与其他语言相区分,每一个C++程序源文件都是以.cpp为扩展名的,它由编译预处理指令、数据或数据结构定义以及若干个函数组成。接下来以例1-1的程序代码来分析C++的基本程序结构。
例1-1
运行结果如图1.2所示。
图1.2 例1-1运行结果
例1-1就是一个完整的C++程序,接下来针对该程序中的部分结构做详细讲解,如图1.3所示。
图1.3 例1-1程序分析
1. iostream头文件
第1行代码是C++文件包含#include的编译指令,称为预处理指令。#include后面的iostream是C++编译器自带的文件,称为C++库文件,它定义了标准输入输出流的相关数据及操作。由于库文件总是被放置在源程序文件的起始处,所以这些文件被称为头文件。在旧的标准C++中,使用的是iostream.h,现在C++标准明确提出不支持扩展名为.h的头文件。实际上iostream和iostream.h是不同的文件,在编译器include文件夹里它们的内容是不同的。
在例1-1第5行代码处使用了iostream头文件中的cout对象来输出一行信息。此处要注意cout的用法,它的后面要跟一个插入运算符“≪”,“≪”后面的所有内容都会被输出在屏幕上。如果要输出字符串,务必要使用双引号将其引起来,这里输出“Hello world!”。在该条语句的结尾处,使用了一个换行符号“endl”,该符号与“\n”的区别是“endl”除了具备“\n”的换行功能外,还可以刷新缓冲区,让数据直接写入文件或显示在屏幕上。
2. 命名空间
using是编译指令,namespace是定义命名空间的关键字。由于iostream头文件是C++标准组件库,它所定义的类、函数和变量均放入命名空间std中,因此例1-1在程序文件的开始位置处指定“using namespace std;”以便能被后面的程序所使用。事实上,cout就是std中已定义的流对象,若不使用“using namespace std;”,还可以使用以下两种方式。
显然,使用“using namespace std;”这种方式最为简便,但最好的方式不是用“using namespace std;”,而是用“using std::cout;”。为方便起见,本书中使用“using namespace std;”这种方式。
3. main函数
例1-1中,main表示主函数。由于每一个程序执行时都必须从main函数开始,而不管该函数在整个程序中的具体位置,因此每一个C++程序或由多个源文件组成的C++项目都有且仅有一个main函数。
在main函数代码中,“int main()”称为函数的函数头。函数头下面是用一对大括号“{}”括起来的部分,称为main函数的函数体。函数体中包括若干条语句,每一条语句都是以分号结束。由于main函数名的前面有int,它表示main函数的返回类型是整型,因此需要在函数体中使用关键字return来将其后面的值作为函数的返回值。由于return语句运行后,函数体return后面的语句不再被执行,因此除非需要函数提前结束,否则return语句应写在函数体的最后。
4. 注释
注释是对程序的代码的解释。假如不对程序进行注释,当代码量非常大时,很可能理不清编写思路。C++的注释有两种类型:双斜杠型和斜杠星型。
双斜杠型注释(也称C++型注释)使用方法比较简单,如例1-1中的第5行。但如果还想注释下一行,则必须在开头再次写“//”,即这种注释只能注释一行语句。
斜杠星型注释(也称C型注释)用“/∗∗/”表示,其中“/∗”告诉编译器忽略后面所有内容,直到发现“∗/”为止,即“/∗”与“∗/”必须成对出现。这种形式比较烦琐,但是它可以注释多行语句。