文章目录
- 导语
- 名词
- 源代码
- 目标代码(object code)
- 可执行代码
- 创建源代码文件
- 编译和链接
- UNIX编译和链接
- Linux编译和链接
- Windows命令行编译器
- Windows编译器
- 总结
导语
假设您编写了一个 C++ 程序。 如何让它运行起来呢? 具体的步骤取决于计算机环境和使用的 C++ 编译器。大体如下:
名词
源代码
使用文本编辑器编写程序, 并将其保存到文件中, 这个文件就是程序的源代码。
目标代码(object code)
编译源代码。 这意味着运行一个程序, 将源代码翻译为主机使用的内部语言——机器语言。 包含了翻译后的程序的文件就是程序的目标代码(object code)。
可执行代码
将目标代码与其他代码链接起来。
链接指的是将目标代码同使用的函数的目标代码以及一些标准的启动代码(startupcode) 组合起来, 生成程序的运行阶段版本。 包含该最终产品的文件被
称为可执行代码。
创建源代码文件
有些 C++ 实现提供了集成开发环境(integrated development environments, IDE)让您能够在主程序中管理程序开发的所有步骤,包括编辑。
有些实现只能处理编译和链接阶段, 要求在系统命令行输入命令。
给源文件命名时, 必须使用正确的后缀, 将文件标识为 C++ 文件。后缀由一个句点和一个或多个字符组成, 这些字符被称作扩展名。
使用什么扩展名取决于 C++ 实现,一些常用的扩展名:
C++实现 | 源代码文件的扩展名 |
---|---|
UNIX | C、 cc、 cxx、 c |
GNU C++ | C、 cc、 cxx、 cpp、 c++ |
Microsoft Visual C++ | cpp、 cxx、 cc |
编译和链接
Stroustrup 实现 C++ 时, 使用了一个 C++ 到 C 的编译器程序,而不是开发直接的 C++ 到目标代码的编译器。 前者叫做 cfront(表示 C 前端, C front end) , 它将 C++ 源代码翻译成 C 源代码, 然后使用一个标准 C 编译器对其进行编译。
随着 C++ 的日渐普及,越来越多的实现转向创建 C++ 编译器, 直接将 C++ 源代码生成目标代码。 这种直接方法加速了编译过程, 并强调 C++ 是一种独立(虽然有些相似) 的语言。
UNIX编译和链接
UNIX命令CC调用 cfront。要编译 C++ 源代码文件 spiffy.C, 则应在 UNIX 提示符下输入如下命令:
CC spiffy.C
程序没有错误, 编译器将生成一个扩展名为 o 的目标代码文件。 在这个例子中, 编译器将生成文件 spiffy.o
接下来, 编译器自动将目标代码文件传递给系统链接程序, 该程序将代码与库代码结合起来, 生成一个可执行文件。 在默认情况下, 可执行文件为 a.out 。
要运行该程序, 只要输入可执行文件的文件名即可:
a.out
程序也可以包含多个文件,可以通过在命令行上列出全部文件来编译程序:
CC my.C precious.C
如果有多个源代码文件, 则编译器将不会删除目标代码文件。 这样, 如果只修改了 my.C 文件, 则可以用下面的命令重新编译该程序:
CC my.C precious.o
这将重新编译 my.C 文件, 并将它与前面编译的 precious.o 文件链接起来。
可能需要显式地指定一些库。 例如, 要访问数学库中定义的函数,必须在命令行中加上 -lm 标记:
CC usingmath.C -lm
Linux编译和链接
Linux系统中最常用的编译器是 g++。g++ 编译器的工作方式很像标准 UNIX 编译器。
下面的命令将生成可执行文件 a.out。
g++ spiffy.cxx
有些版本可能要求链接 C++ 库:
g++ spiffy.cxx -lg++
要编译多个源文件, 只需将它们全部放到命令行中即可:
g++ my.cxx precious.cxx
这将生成一个名为 a.out 的可执行文件和两个目标代码文件 my.o 和 precious.o。 如果接下来修改了其中的某个源代码文件,如 my.cxx, 则可以使用 my.cxx 和 precious.o 来重新编译:
g++ my.cxx precious.o
Windows命令行编译器
要在 Windows PC上编译 C++ 程序,需要下载一个在 Windows 命令提示符模式下运行的免费命令行编译器。 Cygwi n和 MinGW 都包含编译器 GNU C++, 且可免费下载; 它们使用的编译器名为 g++。
要编译名为 great.cpp 的源代码文件, 请在提示符下输入如下命令:
g++ great.cpp
如果程序编译成功, 则得到的可执行文件名为 a.exe。
//great.cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a , b;
cin >> a >> b;
cout << a + b;
return 0;
}
Windows编译器
当前,最流行是 Microsoft Visual C++ 2010。
通常, 必须为程序创建一个项目, 并将组成程序的一个或多个文件添加到该项目中。
创建好项目后, 需要对程序进行编译和链接。
需要注意的是, 程序能够通过某个编译器的编译并不意味着它是合法的 C++ 程序; 同样, 程序不能通过某个编译器的编译也并不意味着它是非法的 C++ 程序。
程序执行完毕后, 有些 IDE 将关闭该窗口, 而有些IDE不关闭。 如果编译器关闭窗口, 将难以看到程序输出,为查看输出, 必须在程序的最后加上一些代码:
cin.get();
cin.get();
cin.get( ) 语句读取下一次键击, 因此上述语句让程序等待, 直到按下了 Enter 键(在按下 Enter 键之前, 键击将不被发送给程序, 因此按其他键都不管用) 。
如果程序在其常规输入后留下一个没有被处理的键击, 则第二条语句是必需的。 例如, 如果要输入一个数字, 则需要输入该数字, 然后按 Enter 键。 程序将读取该数字, 但 Enter 键不被处理, 这样它将被第一个 cin.get( ) 读取。
总结
C 语言新增了诸如控制结构和函数等特性, 以便更好地控制程序流程, 支持结构化和模块化程度更高的方法; 而 C++ 增加了对面向对象编程和泛型编程的支持, 这有助于提高模块化和创建可重用代码, 从而节省编程时间并提高程序的可靠性。