博主介绍:爱打游戏的计算机专业学生
博主主页:夏驰和徐策
所属专栏:夏驰和徐策带你从零开始学C++
1.1.0 这段话告诉我们什么?
这段话解释了一个C++程序中的`main`函数的基本结构和功能。
它告诉我们以下几点:
1. C++程序的入口点是`main`函数,操作系统通过调用`main`函数来运行程序。
2. `main`函数是一个特殊的函数,但其定义与其他函数一样,包括返回类型、函数名、形参列表和函数体。
3. 在这个示例中,`main`函数没有任何形参,即形参列表为空。
4. `main`函数的返回类型必须为`int`,表示返回一个整数类型的值。
5. 函数体由花括号括起来,其中只有一条语句,即`return 0;`。这条语句表示函数执行结束,并将整数值0返回给操作系统。
6. 整数值0通常表示程序正常结束,其他非零值可能表示异常情况或错误码。
总之,这段话向我们介绍了`main`函数在C++程序中的作用和定义方式,以及它的返回类型和函数体的基本结构。这是编写C++程序时必须了解和遵循的基本知识。
1.1.1 编译、运行程序
编写好程序后,我们就需要编译它。如何编译程序依赖于 你使用的操作系统和编译器。
你所使用的特定编译器的相关使用细节,请查阅参考手册或询问经验丰富的同事。
很多 PC机上的编译器都具备集成开发环境 (Integrated Developed Environment, IDE),将编译器与其他程序创建和分析工具包装在一起。在开发大型程序时,这类集成环境可能是非常有用的工具,但需要一些时间来学习如何高效地使用它们。学习如何使用这类开发环境己经超出了本书的范围。
大部分编译器,包括集成 DDE 的编译器,都会提供一个命令行界面。除非你已经了解IDE,否则你会觉得借助命令行界面开始学习C++还是很容易的。这种学习方式的好处是,可以先将精力集中于 C4+语言本身(而不是一些开发工具),而且,一旦你掌握了语言,DDE 通常是很容易学习的。
程序源文件命名约定
无论你使用命令行界面或者 DDE,大多数编译器都要求程序源码存储在一个或多个文件中。程序文件通常被称为源文件(source file)。在大多数系统中,源文件的名字以一个后缀为结尾,后级是由一个句点后接一个或多个字符组成的。后缀告诉系统这个文件是一个C++程序。不同编译器使用不同的后级命名约定,最常见的包括.ccw.cxx、.cpp、.cp 及.c。
从命令行运行编译器
如果我们正在使用命令行界面,那么通常是在一个控制台窗口内(例如 UNIX 系统中的外壳程序窗口或者 Windows 系统中的命令提示符窗口)编译程序。假定我们的 main程序保存在文件prog1.cc 中,可以用如下命令来编译它
$ CC progi.cc
其中,CC 是编译器程序的名字,$是系统提示符。编译器生成一个可执行文件。Windows
系统会将这个可执行文件命名为 prog1.exe。 UNIX 系统中的编译器通常将可执行文件
命名为 a.out。
为了在 Windows 系统中运行一个可执行文件,我们需要提供可执行文件的文件名,可
我的理解:
这段话主要是告诉你在编写好程序之后,你需要将它进行编译才能执行。编译程序的方式会因操作系统和编译器的不同而有所差异。
首先,它提到了集成开发环境(IDE),这是一种将编译器和其他开发工具整合在一起的软件。IDE对于开发大型程序非常有用,但需要花一些时间学习如何使用它们。
然后,它提到了命令行界面和编译器。命令行界面是一种通过命令来与计算机交互的方式,编译器通常提供了命令行界面的支持。使用命令行界面可以更专注于学习C++语言本身,而不是陷入复杂的开发工具中。一旦你熟悉了语言,学习使用集成开发环境也会相对容易。
接着,它解释了程序源文件的命名约定。编译器要求将程序代码存储在一个或多个文件中,这些文件通常被称为源文件。不同的编译器对源文件的命名约定可能有所不同,但常见的后缀有`.cc`、`.cpp`、`.cxx`、`.c`等。
最后,它说明了如何通过命令行界面来运行编译器进行编译。你需要在控制台窗口中输入相应的命令来编译源文件,编译器会生成一个可执行文件。可执行文件在Windows系统中通常以`.exe`为后缀,而在UNIX系统中通常命名为`a.out`。
总之,这段话的目的是给你提供了关于编译程序的一般概念和步骤,同时强调了根据操作系统和编译器的不同可能会有一些细微的差异。
以忽略其扩展名.exe:
$ progi
在一些系统中,即使文件就在当前目录或文什火中,你也必须显式指出文件的位置。在此情况下,我们可以键入
§.1proal
“.〞后跟一个反斜线指出该文件在当前目录中。
为了在UNx 系统中运行一个可执行文什,我们需要使用全文什名,包括文件护展名:
§ a.out
如更需要指定文件位置,需要用一个么。后跟一个斜线水指出可执行文件位于当的目承中。
$ .la.out
访问 main 的返回值的方法依赖于 系统。在UNI 和 Windows 系统中,执行完一个程序后,都可以通过echo 命令获得其返回值。
在UNIX 系统中,通过如下命令获得状态:
§ echo S?
在 Windows 系统中查看状态可键入:
$ echo SERRORLEVELS
运行 GNU 或微软编译器
在不同操作和编译器系统中,运行 C++编译器的命令也各不相同。最常用的编译器是GNU 编译器和微软 Visual Studio 编译器。默认情况下,运行 GNU 编译器的命令是g+t:
$ ¢++=0pr091 prog1.c¢
此处,$是系统提示符。一。 prog1 是编译器参数,指定了可执行文件的文件名。在不同的操作系统中,此命令生成一个名为 progI 或 progI.exe 的可执行文件。在UNIX
系统中,可执行文件没有后级;在贝indows 系统中,后级为.exe。如果省略 了-o prog1
参数,在UNX 系统中编译器会生成一个名为a.out 的可执行文件,在 Windovs 系统中则会生成一个名为arexe 的可执行文件(注意:根据使用的 GNU 编译器的版本,你可能需要指定-std-ct+0x 参数来打开对 Ct+11的支持)。
运行微软 Visual Studio 2010 编译器的命令为cl:
C:lusers \me \ Programs> cl /EHsc progl.cpp
此处,C:NUsers \me \Programs>是系统提示符,\Users (me\Programs 是当前目录名(即当前文件夹)。命令c1调用编译器,/日Hs∞ 是编译器选项,用来打开标准异常处理。微软编译器会自动生成一个可执行文件,其名宇与第一个源文件名对应。可执行文件的文件名与源文件名相同,后级为.exe。在此例中,可执行文件的文件名为
progl. exe.
编译器通常都包含一些选项,能对有问题的程序结构发出警告。打开这些选项通常是一个好习惯。我们习惯在 GNU 编译器中使用-Wal1 选项,在微软编译器中则使用/N4。
更详细的信息请查阅你使用的编译器的参考手册。
我的理解:
这段话主要是关于在不同系统和编译器下运行C++编译器的命令和一些注意事项。
首先,它提到了在某些系统中,即使文件在当前目录或路径中,你也需要显式指定文件的位置。例如,使用`progi`命令来执行可执行文件。如果需要指定文件位置,可以使用文件名前面加上路径,如`.\/a.out`表示可执行文件位于当前目录中。
接着,它提到了如何获取程序的返回值。在UNIX系统和Windows系统中,可以通过不同的命令来获取返回值。在UNIX系统中,使用`echo $?`命令获取状态值,在Windows系统中使用`echo %ERRORLEVEL%`命令获取状态值。
然后,它介绍了运行GNU编译器和微软Visual Studio编译器的命令。使用GNU编译器的命令通常是`g++`,而使用Visual Studio编译器的命令通常是`cl`。通过这些命令编译源文件会生成一个可执行文件,文件名通常与第一个源文件名相同,并且在UNIX系统中没有后缀,在Windows系统中后缀为`.exe`。
对于GNU编译器,它提到了一些常用的选项,如`-Wall`用于打开警告信息,以及可能需要指定`-std=c++11`参数来启用对C++11的支持。对于微软编译器,它提到了使用`/EHsc`选项来打开标准异常处理,并且生成的可执行文件的文件名与第一个源文件名相同。
最后,它建议查阅使用的编译器的参考手册以获取更详细的信息,并提到了在编译器中开启一些选项来检查有问题的程序结构是一个好习惯。
总之,这段话提供了一些关于在不同系统和编译器下编译和运行C++程序的命令和注意事项。
课后练习:
1.1节练习
练习 1.1:查阅你使用的编译器的文档,确定它所使用的文件命名约定。编译并运行第 2页的main 程序。
练习 1.2:改写程序,让它返回-1。返回值-1通常被当作程序错误的标识。重新编译并运行你的程序,观察你的系统如何处理 main 返回的错误标识。
我的理解:
这两题的作用
这两个练习有以下作用:
练习 1.1:
- 通过查阅所使用的编译器的文档,了解编译器所使用的文件命名约定。不同的编译器可能有不同的约定,这将帮助您更好地理解编译器的工作方式。
- 编译并运行第2页的main程序,实际操作一遍编译和运行过程,加深对编译器的使用和程序执行的理解。
练习 1.2:
- 修改程序,让它返回-1作为错误标识。这是一种常见的做法,用于标识程序执行过程中出现的错误。
- 观察您的系统如何处理main返回的错误标识。不同的系统可能有不同的处理方式,例如返回给操作系统的退出码或在命令行界面中显示错误信息。这有助于了解程序执行的错误处理机制。
这两个练习旨在提供实际的编程练习和对编译器工作原理的更深入理解。通过实际编译和运行程序,您可以获得关于编译器、文件命名约定以及程序执行错误处理的实际经验,并加深对这些概念的理解和掌握。这对于学习和实践编程是非常有益的。