《C++入门经典(第6版)》——2.2 程序的组成部分

简介:

本节书摘来自异步社区出版社《C++入门经典(第6版)》一书中的第2章,第2.2节,作者: 【美】Rogers Cadenhead(罗格斯 卡登海德) , Jesse Liberty(杰西 立波提) ,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.2 程序的组成部分

您在第1章创建的程序Motto.cpp包含C++程序的基本框架。程序清单2.1再次列出了该程序的源代码,以便详细探索。

在编程编辑器(如NetBeans)中输入该程序时,记住不要包含其中的编号,提供它们旨在方便引用代码行。

程序清单2.1 Motto.cpp的完整源代码

1: #include
2:
3: int main()
4: {
5: std::cout << "Solidum petit in profundis!n";
6: return 0;
7: }
这个程序生成一行输出——奥尔胡斯大学的校训:

Solidum petit in profundis!
在程序清单2.1中,第 1 行包含了一个名为iostream的文件,导致编译器认为在这个地方输入的是文件iostream的全部内容。

2.2.1 预处理器编译指令

C++编译器执行的第一项操作是,调用另一个被称为预处理器的工具对源代码进行检查,这是在编译器每次运行时自动进行的。

在第1行,第一个字符是符号#,它指出这行是一个将由预处理器处理的命令。这些命令称为预处理器编译指令。预处理器的职责是,阅读代码,查找编译指令并根据编译指令相应地修改代码。修改后的代码将提供给编译器。

预处理器相当于编译前的代码编辑,每条编译指令都是一个命令,告诉这位编辑如何做。

编译指令#include告诉预处理器,将指定文件的全部内容加入到程序的指定位置。第1章说过,C++提供了一个标准的源代码库,您可在程序中使用它们来执行有用的功能。文件iostream中的代码支持输入输出任务,如在屏幕上显示信息以及从用户那里接受输入。

文件名iostream前后的<>告诉预处理器,前往一组标准位置寻找该文件。由于这些尖括号,预处理器将前往为编译器存储头文件的文件夹中查找文件iostream。这些文件也被称为包含文件,因为它们被包含在源代码中。

在第1行,将插入文件iostream的全部内容。

by 

注意:传统上,头文件的扩展名为.h,也被称为h文件,因此使用的编译指令类似于include 。

较新的编译器不要求指定扩展名,但是,如果引用了使用扩展名的文件,编辑指令出于兼容性考虑仍然会奏效。本书在包含文件中会省略不必要的.h。
在第5行,命令cout使用了文件iostream的内容,该命令在屏幕上显示信息。

在上述源代码中,没有其他的编译指令,因此Motto.cpp的其他代码由编译器处理。

2.2.2 源代码行

实际的程序从第3行开始,它声明了一个名为main()的函数。函数是执行一个或多个相关操作的代码块,它执行某些操作后返回到调用它的位置。

每个C++程序都包含一个main()函数,程序运行时将自动调用main()。

在C++中,所有函数都必须在完成任务后返回一个值。函数main()总是返回一个整数,这是使用关键字int指定的。

与C++程序中的其他代码块一样,函数也包含在{和}内。所有函数都以左大括号{开头,并以右大括号}结尾。

在程序Motto.cpp中,函数main()的大括号位于第4行和第7行。大括号内的所有代码都是函数的组成部分。

在第5行,使用命令cout在屏幕上显示了一条消息。在该对象前面,使用了std::对其进行限定,告诉编译器使用标准C++输入输出库。就现在而言,有关这方面的工作原理太复杂,如果在这里介绍,很可能导致您将本书丢得老远。为他人的安全着想,这些内容将在本书后面介绍。就现在而言,将std::cout视为在程序中用于处理输出的对象的名称,而将std::cin视为用于处理用户输入的对象即可。

在第5行,std::cout后面是<<,它被称为输出重定向运算符。运算符是代码行中根据某种信息执行操作的字符。运算符<<显示它后面的信息(仅限当前行)。在第5行,文本“Solidum petit in profundis!n”用双引号括起来了,这将在屏幕上显示一个字符串,末尾的特殊字符n表示换行符,导致接下来的程序输出从下一行开始。

在第6行,程序返回整数0。程序运行完毕后,操作系统将收到这个值。通常,程序返回0表示它运行成功,而返回其他数字表示出现了某种故障。

第7行的右大括号表示函数main()到此结束,而程序也到此结束。所有程序的基本框架都与这里演示的相同。

相关文章
|
1月前
|
存储 网络协议 Ubuntu
【C++网络编程】Socket基础:网络通讯程序入门级教程
【C++网络编程】Socket基础:网络通讯程序入门级教程
55 7
|
13天前
|
运维 Serverless Go
Serverless 应用引擎产品使用之在阿里云函数计算中c++模板,将编译好的C++程序放进去部署如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
12 1
|
17天前
|
安全 编译器 C++
C++从入门到精通:3.2异常处理——掌握C++的异常处理机制,提高程序健壮性
C++从入门到精通:3.2异常处理——掌握C++的异常处理机制,提高程序健壮性
|
17天前
|
存储 IDE 编译器
C++从入门到精通:1.3.1了解IDE与C++程序的编写、编译和运行
C++从入门到精通:1.3.1了解IDE与C++程序的编写、编译和运行
|
17天前
|
存储 程序员 数据库
C++从入门到精通:1.2.2简单程序与接收用户输入
C++从入门到精通:1.2.2简单程序与接收用户输入
|
17天前
|
存储 编译器 C++
C++从入门到精通:1.2.1简单程序编写与基本操作
C++从入门到精通:1.2.1简单程序编写与基本操作
|
26天前
|
编译器 C++
如何判断一段程序是由 C 编译程序还是由 C++ 编译程序编译的?
如何判断一段程序是由 C 编译程序还是由 C++ 编译程序编译的?
|
4天前
|
设计模式 安全 算法
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
14 0
|
5天前
|
C语言 C++
【C++】string类(常用接口)
【C++】string类(常用接口)
13 1
|
2天前
|
编译器 C++
【C++】继续学习 string类 吧
首先不得不说的是由于历史原因,string的接口多达130多个,简直冗杂… 所以学习过程中,我们只需要选取常用的,好用的来进行使用即可(有种垃圾堆里翻美食的感觉)
7 1