亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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.

這時候可以把之前一直使用的示例程序編譯一下。

實例演示
預覽 復制
復制成功!
# include <stdio.h>

int main()
{
    int x,y,z;
    printf("Welcome to Utopia's lessons!\n");
    return 0;
}
運行案例 點擊 "運行案例" 可查看在線運行效果

首先將上面的命令保存為文件名 test.c。

編譯 C 語言的命令如下:

gcc test.c -o test

這個命令的意思是將 test.c 文件名的程序源碼,編譯為名稱 test 二進制程序。

4. 在 Windows 下編譯 C 語言

以前在 Windows 下直接編譯 C 語言是一件困難的事情。要么使用諸如 Visual Studio 之類的 IDE,要么安裝 Cygwin 這類的模擬環境。

但是在目前 Windows 10 中,現在有了更便捷的選擇??梢园惭b WSL 環境, 全稱為 Windows Subsystem for Linux。大家可以通過搜索上面的關鍵字來查找安裝方式。

在這里我將微軟的官方文檔鏈接放在這里,方便大家安裝。這里有詳細步驟,以及大家在安裝過程中會經常遇到的安裝問題等。

在選擇安裝 Ubuntu 后,就可以按照上面在 Linux 環境下編譯 C 語言的方式來編譯了。

Tips:這時候大家可能很好奇文件路徑的問題。在 Windows 10 中的盤符,是掛載在 WSL 系統中 /mnt 目錄下的。比如你的用戶名叫 mooc,那么你的文檔目錄下存儲了源代碼,你要怎么進入 文檔 這個目錄呢?

cd /mnt/c/Users/mooc/Documents/

3. 小結

C 語言的編譯總結起來其實就是,用編譯器將源代碼,也就是我們可以讀懂的程序,翻譯成機器可以讀懂的機器碼。

這個過程需要你做到幾點:

  1. 準備編譯器;
  2. 準備代碼編寫工具;
  3. 編寫代碼;
  4. 通過命令行,使用編譯器編譯。

當然這是最簡單的使用,后面隨著課程的深入,我們還會通過工具來進行編譯命令行的替代。