C 语言的编译

上一个小节 C 语言的程序结构中我们简单的认识了一下 C 语言的程序到底由那些部分组成,但是仅仅了解 C 语言的程序结构还不够,仅仅是万里长征走完了第一步,后面还需要进行很多的步骤才能让程序成为一个可以使用的工业产品。还记的上一个小节中我们提到的 gcc 吗?其实这是一个 C 语言的编译器,这一个小节我们就来学习一下编译器这个概念。

1. C 语言编译器

每个语言都需要编译器,甚至包括可以直接操作 CPU 内部寄存器的汇编语言。编译器的作用就是将我们用接近人类自然语言编写的程序翻译成计算机可以直接执行的二进制文件。

其实使用二进制是人类在计算机发明过程中妥协于工程实践的一个行为。因为从最高效率的数字进制来说,三进制其实更为有效率,但是实现起来不那么容易。

C 语言的编译器有非常多种,下面我们列举了一些,供大家参考。

编译器 编译器作者 支持的操作系统 是否有相关的集成开发环境 授权许可类型
AMPC Axiomatic Solutions Sdn Bhd Windows,Unix & Other Yes Proprietary
Amsterdam Compiler Kit Andrew Tanenbaum and Ceriel Jacobs Unix & Other No BSD
CCS C Compiler CCS, Inc. Windows,Unix & Other Yes Proprietary
Clang Low-Level Virtual Machine Windows,Unix & Other No BSD
DMS Software Reengineering Toolkit Semantic Designs Windows,Unix & Other No Proprietary
GCC C GNU Project Windows,Unix,IBM mainframe, AmigaOS, VAX/VMS, RTEMS No GPL
RCC (RCOR C Compiler) Rodrigo Caetano (rcor) Windows,Unix No GPL
Interactive C KISS Institute for Practical Robotics Windows, Unix, Mac, Linux, IRIX, Solaris, SunOS No
LabWindows/CVI National Instruments Windows,Unix & Other Yes Proprietary
lcc Chris Fraser and David Hanson Windows,Unix & Other Windows only Freeware (source code available for non-commercial use)
Mark Williams C Mark Williams Company Windows,Other Yes Proprietary
Microsoft C Microsoft Windows Yes Proprietary
Nwcc Nils Weller Windows,Unix,Other No BSD
Open64 SGI Google HP Intel Nvidia PathScale Tsinghua University and others Unix,Other No GPL
Pelles C Pelle Orinius Windows Yes Freeware
PGCC The Portland Group Windows,Unix,Other— Mac OS X Yes — Visual Studio on Windows Proprietary
Portable C Compiler Anders Magnusson and others Windows,Unix,Other No BSD
Power C Mix Software Other No Proprietary
QuickC Microsoft Windows Yes Proprietary
SAS/C SAS Institute Windows,Unix,Other-IBM mainframe, AmigaOS, 68K, 88K, Unix Yes Proprietary
Tiny C Compiler Fabrice Bellard Windows,Unix No LGPL
Turbo C Embarcadero Other No Proprietary - V 2.01 freely available
CCS C Compiler CCS, Inc. Windows,Unix,Other Yes Proprietary
MikroC Compiler MikroElektronika, Inc. Windows,Unix,Other Yes Proprietary
ups debugger (includes C interpreter) Tom Hughes, Ian Edwards, and others Unix,Other-Solaris, SunOS Yes GPL
VBCC Dr. Volker Barthelmann Windows,Unix,Other No Freeware (source code available,
XL C IBM Unix-AIX Eclipse Proprietary

当然,编译器还与计算硬件平台息息相关。同一个编译器会因为计算机体系结构不同而分为不同的版本。如 arm64,armhf,x86, x86_64,PowerPC 等等。

在本教程中,我们主要会使用到 gcc 编译器。同时我们会在 arm64,armhf,x84_64 等硬件平台上编译我们的程序。从中可以看出 C 语言的移植性还是很好的。同样的程序,我们可以在不同的编译器以及硬件平台上编译执行。

Tips:请大家注意,我们的学习要求操作系统为 Windows 10,Linux, Unix, 或者 MacOS。对于微软已经停止维护的 Windows 7 以及更早的系统。我们没有办法使用新的特性来编译和运行相关的程序。

2. 使用 IDE 编译 C 语言

在集成环境中,编译 C 语言一般只需要在菜单中选择 运行 或者 调试运行 即可。也可以通过相关的快捷键来直接编译运行程序。要是只编译不运行,那么里面会有 编译 选项和与之对应的快捷键。这时程序只是编译,并不会运行。

对于初学者来说建议大家不使用 IDE, 而是直接使用文本编辑器来编辑程序。大家不要担心,我不会推荐诸如 VIM,EMACS 这种上个世纪的产物,因为太小众了。这里建议大家使用微软的 Visual Studio Code, 简称 VSCode。这个文本编辑器,现代,多功能,多种操作系统下都可以使用,功能强大,可以根据自己的需要安装插件扩展功能。

3. Ubuntu 下安装 GCC 编译器

在类 Linux 中编译 C 语言是一件简单的事情。只要打开一个终端窗口安装 gcc 编译器即可。

对于基于 Ubuntu 系统的用户,安装编译所需的软件只需要执行如下命令:

sudo apt install build-essential

Tips:对于 RPM 包管理的 Linux 发行版(如 CentOS,OpenSUSE 等),会有类似的软件组,只不过名称和安装时所使用的命令不同。

在安装结束后可以查看 gcc 的版本。

gcc --vresion

会有类似如下的信息输出:

gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

这时候可以把之前一直使用的示例程序编译一下。

 
实例演示
预览 复制