您的位置:首页 > 编程语言 > C语言/C++

C++ 初学者指南 第一篇(4)

2009-11-16 21:29 155 查看
必备技能1.4:第一个简单的程序

现在我们开始编程了。我们通过编译和运行下面的一个简短的C++程序开始:

/*
这是一个简单的C++程序.
文件名称为 Sample.cpp.
*/
#include <iostream>
using namespace std;
// C++程序都是从main()函数开始的
int main()
{
cout << "C++ is power programming.";
return 0;
}


我们将按照下面的三个步骤来进行

1.键入程序

2.编译程序

3.运行程序

在开始之前,让我们先复习两个术语:源代码和目标代码。源代码就是人类可读的程序,它是存储在文本文件中的。目标代码是由编译器生成的程序的可执行形式。

键入程序

本书中出现的程序都可以从Osborne的网站上获取到:www.osborne.com 。然而,如果你想手工键入这些程序也是可以的。手工键入这些程序通常可以帮助我们记忆这些关键的概念。如果你选择手工键入这些程序,你必须有一个文本编辑器,而不是一个字处理器。字处理器通常存储带有格式的文本信息。这些信息会使得C++编译器不能正常工作。如果你使用的是windows平台,那么你可以使用记事本程序,或者其它你喜欢的程序编辑器。

存储源代码的文件名称从技术上来说是可以任意取的。然而,C++程序文件通常采用.cpp的扩展名。因此,你可以任意命名C++的程序文件,但是它的扩展名应该是.cpp。针对这里的第一个例子,源文件取名为Sample.cpp。本书中的其它程序,你可以自行选择文件名。

编译程序

怎样编译Sample.cpp取决于你的编译器和你采用了什么样子的编译选项。更进一步来说,许多编译器,例如你可以自由下载的微软的 Visual C++ Express Edition,都提供两种不同的编译方式:命令行编译和集成开发环境。因此,这里不可能给出一个通用的编译C++程序的操作。你必须查看与你的编译器相关的操作指南。

如果你采用的是Visual C++,那么最简单的编译和运行本书中的程序的方式就是采用VC中提供的命令行。例如,使用Visual C++来编译Sampler.cpp,你可以采用这样的命令行:

C:/...>cl -GX Sample.cpp

其中-GX是增强编译选项。在使用Visual C++命令行编译器之前,你必须先执行visual C++提供的批处理文件 VCVARS32.BAT。Visual Studio 同时也提供了一个很方便使用命令行的方式:可以通过任务栏的 开始|程序|Microsoft Visual Studio 菜单中的工具列表中的Visual Studio Command Prompt菜单来激活命令行。

C++编译器的输出是一个可以执行的目标代码。在windows环境下,可执行文件的名字和源码文件的名字相同,但是扩展名为.exe。因此,Sample.cpp的可执行文件为Sample.exe。

运行该程序

C++程序编译好之后就可以运行了。既然C++编译器的输出为可执行的目标代码,那么运行这个程序,只需要在命令行提示符下键入这个程序的名字即可。例如,运行Sample.exe时,采用如下的命令行

C:/...>Sample

运行时,程序将显示下面的输出:

C++ is power programming.

如果你使用的是集成开发环境,那么你可以从菜单中选择Run 来运行这个程序。运行的方式也和编译器相关,这点请参考你使用的编译器的操作指南。针对本书中的程序,通常从命令行来编译和运行会简单一些。

最后一点:本书中的程序都是基于控制台模式的,而不是基于windows模式的。也就是说,这些程序是运行在命令行提示符下的。C++对windows编程也是很内行的。实际上,它是windows开发时最常用的语言。然而,本书中所有程序都没有使用windows的图形化用户界面。这一点的原因也很好理解:windows编程本质上是很巨大和复杂的,即使是创建一个最小的windows框架程序也需要50至70行代码,而编写能够展示C++特性的windows程序也需要几百行代码。相比之下,基于控制台的程序更短小,通常都是采用基于控制台的程序来学习的。一旦你掌握了C++,你就能够很轻松地把学习的知识应用到windows编程上了。

逐行剖析第一个简单的程序

尽管Sample.cpp相当短小,但是它却涵盖了几个C++中常用的关键特性。让我们近距离地研究一下这个程序的每个部分。程序以

/*

这是一个简单的C++程序.

文件名称为 Sample.cpp.

*/

开始,这点是很常见的。就像其它大多数编程语言一样,C++允许程序员对程序的源码进行注释。注释的内容会被编译器忽略掉。注释的目的是给所有读源码的人描述或者解释该程序。就本例子来讲,注释解释了改程序的功能。在更复杂的程序中,注释可以被用来解释程序的每个部分是为什么这样做,以及如何做才能以完成预期的功能。换句说,你可以对程序的功能提供一种详细的描述。

在C++中,有两种注释的方式。刚才看到的叫做多行注释。这种类型的注释以/*开始, 以*/结束。任何处于这两个注释符号之间的内容都会被编译器忽略掉。多行注释可以是一行或者多行的。第二种注释会在后续的程序中看到。

接下来的代码是:

#include <iostream>

C++语言定义了几个头文件,这些头文件中定义了或者必要的或者有用的信息。该程序就需要头文件中的iostream 来支持C++的输入/输出系统。该头文件是由编译器提供的。程序中通过#include来包含头文件。在本书后续章节中,我们会学习到更多的关于头文件和为什么要包含头文件的知识。

接下来的代码是:

using namespace std;

这行告诉编译器使用std命名空间。命名空间是相对较新的增加到C++里面的特性。本书后续会对命名空间进行详细的讨论,这里给出一个简单的描述。一个命名空间创建了一个声明域,其中可以放置各种程序元素。在一个命名空间中声明的元素和另外一个命名空间中声明的元素是相互分开的。命名空间可以帮助我们组织大型程序。using语句通知编译器我们要使用std这个命名空间。这是声明了整个标准C++库的命名空间。通过使用std这个命名空间,我们访问标准库。(因为命名空间相对比较新,旧的编译器可能不支持。如果你使用的是旧的编译器,请参见附录B,其中描述了简单的应急措施)

程序的下一行是:

// C++程序都是从main()函数开始的

这一行中使用到了C++中的第二种注释方式:单行注释。单行注释以//开始,在一行的末尾结束。通常情况下,针对较多的,详细的注释使用多行注释,简单的注释一般使用单行注释。当然,这个也完全是个人编程风格的问题。

接下来的一行代码,正如上面的注释一样,是程序执行的入口:

int main()

所有的C++程序都是由一个或者多个函数组成。正如前面解释的那样,一个函数就是一个子程序。每一个C++函数都必须有个名字,任何C++程序都必须有一个main()函数,就像本例子中的一样。main()函数是程序执行的入口,通常也是程序结束的地方。(从技术上来讲,一个C++程序通过调用main()函数而开始,大多数情况下,当main()函数返回的时候,程序也就结束了)。该行中的一对括号表示main()函数代码的开始。main()函数前面的int 表明了该函数的返回值为int类型。后面会介绍到,C++支持几种内建的数据类型,其中就有int。它代表的是一个整型数。

接下的一行是:

cout<<"C++ is power programming.";

这是一条控制台输出语句。它输出:C++ is power programming. 到计算机显示器上。输出是通过使用输出运算符<<来完成的。<<运算符把它右侧的表达式输出到左侧的设备上。cout是一个预先定义好的标识符,它代表了控制台的输出,通常就是指计算机的显示器。因此,这句程序就是把信息输出到计算机的显示器上。请注意:这句程序是以分号结束的。实际上,所有的C++语句都是以分号结束的。信息“C++ is power programing.”是一个字符串。在C++中,一个字符串就是由双引号引起来的一个字符的序列。在C++中,字符串是会经常用到的。

下一行是:

return 0;

该行代码终止了main()函数,并且返回0给调用进程(调用进程通常就是操作系统)。对于大多数的操作系统来说,返回值0就意味着程序正常终止。其它返回值则代表程序因为产生了错误而终止。return是C++的关键字之一,用它来表示函数的返回值。所有的程序在正常终止的情况下(也就是没有出现错误的情况下)都应该返回0。

程序最后的大括号表示程序到此结束。

处理语法错误

根据以前的编程经验,我们知道,编程时很容易出现键入错误的情况的。庆幸的是,如果我们在键入程序的时候输入错误了,编译器在编译的时候会报告语法错误信息的。大多数的C++编译器都试图正确理解我们编写的程序。正是由于这个原因,编译器报告的错误并不一定都反映了问题出现的原因。例如,在前面的程序中,如果我们遗忘了main()后面的大括号,编译器则会报告说cout语句有语法错误。当编译器报告语法错误信息的时候,我们就应该检查最新写的那几行代码,看看是否有错误。

专家答疑

问:

除了错误信息以外,编译器还会提供告警信息。告警和错误有什么区别,我应该关注那类信息?

答:

除了报告致命的错误信息以外,大多是的编译器都会上报几种告警信息。错误信息代表的是程序中出现了明确的错误,比如忘记键入分号等。告警信息则是指出现了从技术上讲是正确的,但是值得怀疑的地方。由程序员来决定此处是否正确。

告警可以用来报告诸如使用了已经被废弃的特性或者无效的构成等。通常来讲,我们可以选择那些告警是可见的。本书中的程序是符合标准C++的,因此只要输入无误,是不会出现令人烦恼的告警信息的。

针对本书中的示例程序,你可能想使用编译器缺省的错误报告。然而,你可以查阅自己编译器的相关文档以明确编译器提供哪些选项。很多编译器都可以帮助我们检查出潜在的错误,不至于引起大麻烦。了解编译器的错误报告机制是很值得的。

练习:

1.C++程序是从哪里开始执行的?

2.cout是做什么用的?

3.#include<iostream>是用来做什么的?

答案:

1.C++程序从main函数开始执行。

2.cout是预先定义好的标识符,它连接到控制台输出。

3.它用来包含头文件<iostream>,可以支持输入/输出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: