1.1. 编写简单的 C++ 程序
main 函数在很多方面都比较特别,其中最重要的是每个 C++ 程序必须含有 main 函数,且 main 函数是(唯一)被操作系统显式调用的函数。操作系统通过 main 函数返回的值来确定程序是否成功执行完毕。
返回 0 值表明程序程序成功执行完毕。定义 main 函数和定义其他函数一样。
定义函数必须指定 4 个元素:返回类型、函数名、圆括号内的形参表(可能为空)和函数体。main 函数的形参个数是有限的。
main 函数的返回值必须是 int 型,该类型表示整数。int 类型是内置类型,即该类型是由 C++ 语言定义的。
1.1.1. 编译与执行程序
程序源文件命名规范
不管我们使用命令行界面还是 IDE,大多数编译器希望待编译的程序保存在文件中。程序文件称作源文件。大多数系统中,源文件的名字由文件名(如 prog1)和文件后缀两部分组成。依据惯例,文件后缀表明该文件是程序。文件后缀通常也表明程序是用什么语言编写的,以及选择哪一种编译器运行。我们用来编译本书实例的系统将带有后缀 .cc 的文件视为 C++ 程序,因此我们将该程序保存为:
prog1.cc
程序文件的后缀与运行的具体编译器有关。其他的形式还包括。
prog1.cxx prog1.cpp prog1.cp prog1.C
调用 GNU 或微软编译器
调用 C++ 编译器的命令因编译器和操作系统的不同而不同,常用的编译器是 GNU 编译器和微软 Visual Studio 编译器。调用 GNU 编译器的默认命令是 g++:
$ g++ prog1.cc -o prog1
在 UNIX 系统下,可执行文件没有后缀;而在 Windows 下,后缀为 .exe。-o prog1 是编译器参数以及用来存放可执行文件的文件名。如果省略 -o prog1,那么编译器在 UNIX 系统下产生名为 a.out 而在 Windows 下产生名为 a.exe 的可执行文件。
微软编译器采用命令 cl 来调用:
C:\directory> cl -GX prog1.cpp
这里的 C:directory> 是系统提示符,directory 是当前目录名。cl 是调用编译器的命令。-GX 是一个选项,该选项在使用命令行界面编译器程序时是必需的。微软编译器自动产生与源文件同名的可执行文件,这个可执行文件具有 .exe 后缀且与源文件同名。
访问 main 函数的返回值的方式和系统有关。不论 UNIX 还是 Windows 系统,执行程序后,必须发出一个适当的 echo 命令。UNIX 系统中,通过键入如下命令获取状态:
$ echo $?
要在 Windows 系统下查看状态,键入
C:\directory> echo %ERRORLEVEL%
1.2. 初窥输入/输出
1.2.1. 标准输入与输出对象
标准库定义了 4 个 IO 对象。处理输入时使用命名为 cin(读作 see-in)的 istream 类型对象。这个对象也称为标准输入。处理输出时使用命名为 cout(读作 see-out)的 ostream 类型对象,这个对象也称为标准输出。标准库还定义了另外两个 ostream 对象,分别命名为 cerr 和 clog(分别读作“see-err”和“see-log”)。cerr 对象又叫作标准错误,通常用来输出警告和错误信息给程序的使用者。而 clog 对象用于产生程序执行的一般信息。
endl 是一个特殊值,称为操纵符,将它写入输出流时,具有输出换行的效果,并刷新与设备相关联的缓冲区。通过刷新缓冲区,用户可立即看到写入到流中的输出
1.3. 关于注释
注释对不可嵌套
注释总是以 /* 开始并以 */ 结束。这意味着,一个注释对不能出现在另一个注释对中。由注释对嵌套导致的编译器错误信息容易使人迷惑。
在标准化之前的 C++ 中,定义在 for 语句头的名字在 for 循环外是可访问的。语言定义中的这一改变,可能会使习惯于使用老式编译器的人,在使用遵循标准的新编译器时感到惊讶。
1.4. 控制结构
当我们使用 istream 对象作为条件,结果是测试流的状态。如果流是有效的(也就是说,如果读入下一个输入是可能的)那么测试成功。遇到文件结束符或遇到无效输入时,如读取了一个不是整数的值,则 istream 对象是无效的。处于无效状态的 istream 对象将导致条件失败。