什么是编译器?
在编译系统设计一书里头曾对编译器(compiler)有这样的说明:
程式语言对人及电脑来说,是描述计算过程的记号。如我们所知,这个世界依赖程式语言, 因为在所有电脑上执行的所有软体都是用某种程式语言编写的。但是,在程式可以执行之前,它首先需要翻译成能够被电脑执行的形式。
完成这项翻译工作的软体系统称为编译器(compiler)。
简单地说,编译器就是程式,它可以读取某一种语言(原始语言, source language)编写的程式,然后将程式翻译成等同于另一种语言(目的语言)编写的程式。
[adsense][/adsense]
如果你的程式是像下面的C++程式:
int a, b, sum;
cin >> a;
cin >> b;
sum = a + b;
cout << sum << endl;
不管你看不看得懂这样的程式,我只要跟你说电脑还是无法解读的,他们需要用编译器解译成
00000 | 10011110 |
00001 | 11110100 |
00010 | 10011110 |
00011 | 11010100 |
00100 | 10111111 |
00101 | 00000000 |
这样子的机器码,编译器实在是很伟大,也是你在写程式之前必须配备好的。
所以在你开始设计C或C++程式之前,可以线上购买编译器或是网路下载免费的软体来编译C或C++程式,如果你是使用Mac OS X、Linux、或是其他*nix变种的系统(像是Unix 或是FreeBSD),可能就有安装好的编译器像是gcc或g++可以使用。
编译器术语
- 编译 简单地说,就是将原始码档案转成执行档,但严格地说,编译是一种解译的过程。
- 连结 将编译过的程式码转成执行档
- 建置 建置是指建立最后执行档的过程(通常被简称为编译),有工具可以帮忙减少建置过程的复杂度–像是makefiles。
- 编译器 一般来说,编译器指的是编译器跟“连结器”
- 连结器 藉着连结产生可执行的程式
- 整合开发环境(IDE,Integrated Development Environment),结合文字编辑器跟编译器的软体,这样你可以在IDE内直接编译跟执行你的程式,IDE通常有能力帮你快速跳到编译错误的地方。
了解编译的过程
- 编译和连结的过程 这文件主要说明当你编译程式时究竟发生了什么事,比上面讨论的术语要更详细一点。
- 处理编译错误 在你的程式码捕捉编译器跟连结器的错误建议
- 了解编译警告 学习编译器警告是什么,以及如何跟为什么要修正他们
- 在C跟C++中宣告跟定义有什么不同? 学习定义一个变数、类别或函式的区别–以及如何定义–以及为什么它在你编译或连结程式有问题时会有关系
命令列程式
命令列程式是使用者跟环境之间使用文字来沟通的程式,像是列印文字到荧幕上或是从键盘读取输入。
命令列程式很容易互动,在所有平台上几乎都有可预期的行为,他们也容易用来实作,因此在学习程式语言的基础时很有帮助:在下面的例子中有所有的命令列程式。
编译命令列程式取决于你所使用的特定工具的方法。
对初学者来说要编译C++程式就简单的方法就是使用整合开发环境(IDE),IDE通常整合了几个开发工具,包括文字编辑器跟直接编译程式的工具。
这里有一些如何使用不同IDE编译跟执行命令列程式的操作:
IDE | 平台 | 命令列程式 |
---|---|---|
Code::blocks | Windows/Linux/MacOS | 使用Code::blocks编译命令列程式 |
Visual Studio Express | Windows | 使用VS Express 2013编译命令列程式 |
Dev-C++ | Windows | 使用Dev-C++ 5.11编译命令列程式 |
如果你是使用有开发功能的Linux或是Mac环境,你应该能够直接从终端机编译任何的范例,只要在命令中加入C++11的旗标给编译器:
编译器 | 平台 | 命令 |
---|---|---|
GCC | Linux以及其他的… | g++ -std=c++0x 范例.cpp -o 范例程式 |
Clang | OS X以及其他的… | clang++ -std=c++11 -stdlib=libc++ 范例.cpp -o 范例程式 |
Borland | Windows | 可参考此文件编译 |