本节书摘来自异步社区出版社《C++游戏编程入门(第4版)》一书中的第1章,第1.2节,作者:【美】Michael Dawson(道森),更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.2 编写第一个C++程序
C++游戏编程入门(第4版)
到此为止,我们已经介绍了足够多的理论知识。现在来实践编写第一个C++程序。麻雀虽小,五脏俱全。该程序同样演示了在控制台窗口中显示文本的方法。
1.2.1 Game Over程序简介
程序员在学习新语言时,编写的第一个程序便是经典的Hello World程序,在屏幕上显示Hello World。Game Over程序打破了这个传统,显示的是Game Over!。该程序的运行结果如图1.2所示。
图1.2 您的第一个C++程序显示的是计算机游戏中名声最差的两个单词
从Cengage Learning网站(www.cengageptr.com/downloads)上可以下载该程序的代码。程序位于文件夹Chapter 1中,文件名为game_over.cpp。
提示
在网站www.cengageptr.com/downloads上可以搜索本书,下载本书程序的全部源代码。可以使用本书的ISBN号9781305109919来搜索。
// Game Over
// A first C++ program
#include <iostream>
int main()
{
std::cout << "Game Over!" << std::endl;
return 0;
}```
###1.2.2 注释
程序的前两行是注释。
// Game Over
// A first C++ program`
注释是给程序员看的,编译器完全忽略。注释可以帮助其他程序员理解程序作者的意图。它也对程序作者本身有帮助。对于程序员曾使用晦涩的代码完成的工作,它能帮助程序员回忆起代码的含义。
注释以两个连续的斜线(//)开始,其后的部分即为注释部分。这意味着我们可以在同一行中某一块C++代码后面添加注释。
提示
我们还可以使用C风格注释,将注释扩展到多行。所要做的只是把注释以/开头,并以/结尾。任何处于这两个记号之间的文本都是注释部分。
1.2.3 使用空白字符
程序Game Over中注释以下是一个空白行。编译器会忽略空白行。实际上,编译器忽略所有的空白字符——空格、制表符和换行符。和注释一样,空白字符只是给程序员看的。
空白字符使用得当可以让程序更加清晰易懂。例如,空白行可以用于分隔属于一起的代码块。该程序的代码也将空白字符(准确地说是制表符)置于花括号中两行的起始位置,作为每一行的开始。
1.2.4 包含其他文件
程序中接下来的一行是预处理器指令。预处理器指令以#符号开头。
`
include `
预处理器 在编译之前运行,并基于各种指令进行文本替换。在本例中,含有#include指令的这一行代码告诉预处理器将另一个文件的内容包含进来。
程序中包含了作为标准库一部分的iostream文件,因为其中有用于显示输出的 代码。
文件名两端的小于号(<)和大于号(>)告诉编译器在其自带文件中查找需要的文件。像这样包含在程序中的文件称为头文件。
1.2.5 定义main()函数
接下来的非空白行是一个名为main()的函数头。
`
int main()`
函数 是指一组程序代码,它能完成某种任务并返回一个值。在本程序中,int表示函数将返回一个整型值。所有函数头在函数名后面都有一对圆括号。
所有C++程序都必须有一个名为main()的函数作为程序的起始点。程序是从这里开始运行的。
下面一行标记函数的开始。
`
{`
程序的最后一行标记函数的结束。
`
}`
所有函数都被一对花括号括起来。花括号里面的代码都属于函数。两个花括号之间的代码称为代码块。代码块通常会缩进显示,表示它形成了一个代码单元。构成整个函数的代码块称为函数体。
1.2.6 通过标准输出显示文本
main()函数体的第一行在控制台窗口显示Game Over!和一个换行符。
std::cout << "Game Over!" << std::endl;
"Game Over!"是字符串,即一连串可以打印的字符。从技术上而言,它是一个字符串字面值,即它就是引号中间的那些字符。```
cout是在iostream文件中定义的对象,用于向标准输出流发送数据。在大多数程序中(包括本程序),标准输出流仅仅是指计算机屏幕中的控制台窗口。
输出运算符(<<)用于向对象cout发送字符串。可以将输出运算符想象成一个漏斗,它将开口一端的数据收集起来并使其流向收口的一端。所以字符串顺着漏斗流向了标准输出——屏幕。
cout的前缀std告诉编译器这里的cout来自标准库。std是名称空间。可以将名称空间想象成电话号码的区号,它唯一标识了成员所属的组。名称空间后面跟着作用域解析运算符(::)。
最后,程序还向标准输出发送了std::endl。endl在iostream中定义,它也是std名称空间中的一个对象。向标准输出发送endl类似于在控制台窗口中按下回车键。实际上,如果此时向控制台窗口发送另一个字符串,它将出现在屏幕的下一行。
这些概念可能有些难以理解。请看图1.3所示,它以图形方式形象地表示了所有描述过的元素之间的关系。
()<div style="text-align: center">
<img src="https://yqfile.alicdn.com/4e09f849b8859f5c9a28ba5b1c5268c400d9de07.png" >
</div>
图1.3 标准C++的实现包含了一个称为标准库的文件集合,
标准库包含了iostream文件,iostream文件又包含了各种定义,其中包括cout对象的定义
###1.2.7 语句的终止
如果留意函数的第一行,会发现它以一个分号(;)结尾。这是因为这一行是一条语句——控制程序执行流程的基本单元。所有语句都必须以分号结尾,否则编译器会报错,而且不会编译程序。
###1.2.8 从main()函数返回值
函数的最后一条语句将0返回给操作系统。
` return 0;`
从main()函数返回0表示程序正常结束。操作系统与返回值无关。一般来说,可以像该程序一样简单地返回0。
技巧
在运行Game Over程序时,可能只是看见控制台窗口一闪而过。那是因为C++太快,它在不到一秒的时间内打开一个控制台窗口,显示Game Over!,然后关闭窗口。然而,在Windows操作系统下,可以创建批处理文件,在运行控制台程序后暂停。这可以保持控制台窗口处于打开状态,以便查看程序结果。因为编译后的程序名为game_over.exe,所以可以简单地创建由以下两行代码组成的批处理文件:*
`
game_over.exe
pause`
创建批处理文件的步骤如下:
(1)打开一个文本编辑器,如Notepad(不能是Word或WordPad)。
(2)输入文本。
(3)把这个文件保存到和game_over.exe文件相同的文件夹中。以.bat扩展名保存文件,如game_over.bat。
最后,双击文件图标运行批处理文件。因为批处理文件会使控制台窗口处于打开状态,这时应当能看到程序结果。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。