今天這篇文章我們來聊聊C 語言的編譯器。
每個語言都需要編譯器,甚至包括可以直接操作 CPU 內(nèi)部寄存器的匯編語言。編譯器的作用就是將我們用接近人類自然語言編寫的程序翻譯成計算機可以直接執(zhí)行的二進(jìn)制文件。
其實使用二進(jìn)制是人類在計算機發(fā)明過程中妥協(xié)于工程實踐的一個行為。因為從最高效率的數(shù)字進(jìn)制來說,三進(jìn)制其實更為有效率,但是實現(xiàn)起來不那么容易。
C 語言的編譯器有非常多種,下面我們列舉了一些,供大家參考。
編譯器 | 編譯器作者 | 支持的操作系統(tǒng) | 是否有相關(guān)的集成開發(fā)環(huán)境 | 授權(quán)許可類型 |
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 |
當(dāng)然,編譯器還與計算硬件平臺息息相關(guān)。同一個編譯器會因為計算機體系結(jié)構(gòu)不同而分為不同的版本。如 arm64,armhf,x86, x86_64,PowerPC 等等。
我們可以使用 gcc 編譯器。同時還可以在 arm64,armhf,x84_64 等硬件平臺上編譯我們的程序。從中可以看出 C 語言的移植性還是很好的。同樣的程序,我們也可以在不同的編譯器以及硬件平臺上編譯執(zhí)行。
在集成環(huán)境中,編譯 C 語言一般只需要在菜單中選擇 運行 或者 調(diào)試運行 即可。也可以通過相關(guān)的快捷鍵來直接編譯運行程序。要是只編譯不運行,那么里面會有 編譯 選項和與之對應(yīng)的快捷鍵。這時程序只是編譯,并不會運行。
對于初學(xué)者來說建議大家不使用 IDE, 而是直接使用文本編輯器來編輯程序。這里建議大家使用微軟的 Visual Studio Code, 簡稱 VSCode。這個文本編輯器,現(xiàn)代,多功能,多種操作系統(tǒng)下都可以使用,功能強大,可以根據(jù)自己的需要安裝插件擴展功能。
在類 Linux 中編譯 C 語言是一件簡單的事情。只要打開一個終端窗口安裝 gcc 編譯器即可。
對于基于 Ubuntu 系統(tǒng)的用戶,安裝編譯所需的軟件只需要執(zhí)行如下命令:
sudo apt install build-essential代碼塊1
Tips:對于 RPM 包管理的 Linux 發(fā)行版(如 CentOS,OpenSUSE 等),會有類似的軟件組,只不過名稱和安裝時所使用的命令不同。
在安裝結(jié)束后可以查看 gcc 的版本。
gcc --vresion代碼塊1
會有類似如下的信息輸出:
gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0Copyright (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.代碼塊123
這時候可以把之前一直使用的示例程序編譯一下。
實例演示
# include <stdio.h>int main(){ int x,y,z; printf('Welcome to Utopia's lessons!\n'); return 0;}12345678
首先將上面的命令保存為文件名 test.c。
編譯 C 語言的命令如下:
gcc test.c -o test代碼塊1
這個命令的意思是將 test.c 文件名的程序源碼,編譯為名稱 test 二進(jìn)制程序。
以前在 Windows 下直接編譯 C 語言是一件困難的事情。要么使用諸如 Visual Studio 之類的 IDE,要么安裝 Cygwin 這類的模擬環(huán)境。
但是在目前 Windows 10 中,現(xiàn)在有了更便捷的選擇。可以安裝 WSL 環(huán)境, 全稱為 Windows Subsystem for Linux。大家可以通過搜索上面的關(guān)鍵字來查找安裝方式。
在這里我將微軟的官方文檔鏈接放在這里,方便大家安裝。這里有詳細(xì)步驟,以及大家在安裝過程中會經(jīng)常遇到的安裝問題等。
適用于 Linux 的 Windows 子系統(tǒng)安裝指南 (Windows 10)
在選擇安裝 Ubuntu 后,就可以按照上面在 Linux 環(huán)境下編譯 C 語言的方式來編譯了。
Tips:這時候大家可能很好奇文件路徑的問題。在 Windows 10 中的盤符,是掛載在 WSL 系統(tǒng)中 /mnt 目錄下的。比如你的用戶名叫 mooc,那么你的文檔目錄下存儲了源代碼,你要怎么進(jìn)入 文檔 這個目錄呢?
cd
/mnt/c/Users/mooc/Documents/ 代碼塊1
C 語言的編譯總結(jié)起來其實就是,用編譯器將源代碼,也就是我們可以讀懂的程序,翻譯成機器可以讀懂的機器碼。
這個過程需要你做到幾點:
當(dāng)然這是最簡單的使用,我們還可以通過工具來進(jìn)行編譯命令行的替代。