App下載

C語(yǔ)言的編譯器有哪些?MinGW介紹!

W3Cschool小編 2021-09-02 17:46:17 瀏覽數(shù) (8908)
反饋

臨近開(kāi)學(xué),相信有一批好學(xué)的準(zhǔn)計(jì)算機(jī)相關(guān)行業(yè)的小伙伴在暑假期間開(kāi)始自學(xué)C語(yǔ)言了。憑心而論,小編覺(jué)得python更適合作為初學(xué)者第一次學(xué)習(xí)的語(yǔ)言,他的安裝配置以及語(yǔ)法各方面都比C語(yǔ)言易學(xué)。但C語(yǔ)言也有其學(xué)習(xí)的優(yōu)點(diǎn),這不是本篇要討論的內(nèi)容。今天小編要介紹的,是關(guān)于C語(yǔ)言的編譯器,以及其中一款比較出名的編譯器MinGW的安裝。

什么是編譯?

我們把人說(shuō)的話(huà),稱(chēng)為自然語(yǔ)言。同理,機(jī)器與機(jī)器之間的交流,使用的就是機(jī)器語(yǔ)言。我們知道機(jī)器與機(jī)器之間的交流是通過(guò)導(dǎo)線(xiàn)為基礎(chǔ),電流的變化傳遞的相關(guān)信息。通俗的講,電路中有兩種狀態(tài),一種是有電,一種是沒(méi)電。如果用數(shù)字0代表沒(méi)電,數(shù)字1代表有電1,那么連續(xù)的狀態(tài)變化,就能轉(zhuǎn)化為一串由0和1構(gòu)成的信息串。機(jī)器與機(jī)器之間的交流,就建立在這樣的信息串上2。

1. 這里的有電沒(méi)電是一種比較通俗的說(shuō)法,實(shí)際上應(yīng)該稱(chēng)其為高電平,低天平。

2.這樣的信息串,又被稱(chēng)為機(jī)器語(yǔ)言,在計(jì)算機(jī)中常見(jiàn)的兩個(gè)處理信息的結(jié)構(gòu)中,內(nèi)存負(fù)責(zé)將這樣的信息存儲(chǔ)下來(lái),方法也很簡(jiǎn)單,每個(gè)內(nèi)存單元分別記錄響應(yīng)的0和1,這就是內(nèi)存的存儲(chǔ)過(guò)程,按一定的順序?qū)⑦@些0和1讀取出來(lái),這就是內(nèi)存的讀取過(guò)程。而CPU按一定的間隔讀取這些信息串(比如以64位計(jì)算機(jī)為例,他可以一次讀取64個(gè)這樣的信息串),這些信息串具有不同的效果,有些是指令,比如讀到某些串后它就執(zhí)行加法等等,這些是計(jì)算機(jī)組成原理的知識(shí),有興趣可以前往相關(guān)手冊(cè)進(jìn)行學(xué)習(xí)。

機(jī)器語(yǔ)言中的內(nèi)容有一部分是固定的指令,我們通過(guò)一些助記符(比如ADD,JUMP等)來(lái)代替這些固定的指令,這就是匯編語(yǔ)言。匯編語(yǔ)言要運(yùn)行前需要將這些固定的指令進(jìn)行替換,這個(gè)過(guò)程我們稱(chēng)其為匯編。

 匯編語(yǔ)言跟機(jī)器語(yǔ)言更為接近,人比較難以讀懂這樣的語(yǔ)言,所以這樣的語(yǔ)言被稱(chēng)為底層語(yǔ)言,或者低級(jí)語(yǔ)言。我們之前說(shuō)過(guò),機(jī)器語(yǔ)言是跑在不同的機(jī)器上的,不同的機(jī)器存在著“方言”,也就是說(shuō)不同的機(jī)器對(duì)同樣的信息串理解是不同的,這也就導(dǎo)致了不管是機(jī)器語(yǔ)言還是匯編語(yǔ)言,他只能跑在對(duì)應(yīng)的機(jī)器上,在別的機(jī)器上需要重新編寫(xiě)匯編代碼。

匯編并不是編程的好工具。1972年,丹尼斯·里奇開(kāi)發(fā)出了C語(yǔ)言,這是一種比匯編語(yǔ)言更適合用來(lái)編程的語(yǔ)言(在當(dāng)時(shí)確實(shí)是如此,但隨著時(shí)代的變革,后來(lái)者以更加易學(xué)和更加優(yōu)雅將前浪拍在了沙灘上),他通過(guò)一些符號(hào)來(lái)表述一個(gè)運(yùn)算過(guò)程,這些符號(hào)就是代碼(c語(yǔ)言的代碼,后綴為.c或者.cpp,另外還有.h作為頭文件)。這些代碼對(duì)于人來(lái)說(shuō)是比較易讀的,但對(duì)于機(jī)器來(lái)說(shuō)是完全不可讀的,那么怎么將這些代碼變成可讀的呢?這就要介紹編譯器的存在了。

 C語(yǔ)言跟自然語(yǔ)言比較接近,而相對(duì)遠(yuǎn)離了機(jī)器語(yǔ)言,這種人容易讀懂的語(yǔ)言被稱(chēng)為高級(jí)語(yǔ)言。編譯就是將高級(jí)語(yǔ)言轉(zhuǎn)化為低級(jí)語(yǔ)言的一個(gè)過(guò)程。

補(bǔ)充:其實(shí)還有另一種轉(zhuǎn)化方式叫解釋?zhuān)幾g和解釋的區(qū)別是:編譯一次性將所有的高級(jí)語(yǔ)言翻譯為低級(jí)語(yǔ)言,解釋一句一句的將高級(jí)語(yǔ)言解釋為低級(jí)語(yǔ)言。著名的解釋型語(yǔ)言有JavaScript,python。Java的字節(jié)碼在jvm上也是解釋執(zhí)行的。

什么是編譯器?

編譯器就是用來(lái)將高級(jí)語(yǔ)言轉(zhuǎn)化為低級(jí)語(yǔ)言的程序。

編譯

最流行的C語(yǔ)言編譯器有以下幾種:

  • GNU Compiler Collection 或稱(chēng) GCC(GCC編譯器的Windows版本被稱(chēng)為MinGW)
  • Microsoft C 或稱(chēng) MS C(也叫MSVC)
  • Borland Turbo C 或稱(chēng) Turbo C

這些C語(yǔ)言版本不僅實(shí)現(xiàn)了ANSI C標(biāo)準(zhǔn),而且在此基礎(chǔ)上各自作了一些擴(kuò)充,使之更加方便、完美。


 GCC是類(lèi)Unix操作系統(tǒng)(Linux,macOS,BSD等)所用的編譯器,MSVC是Windows所用的編譯器,編譯的結(jié)果不能混用,也就是說(shuō)使用MSVC編譯的可執(zhí)行文件是不能在linux上運(yùn)行的(另外linux的可執(zhí)行文件也不是.exe)。

怎么安裝和使用這些編譯器(Windows平臺(tái)下)?

MSVC只能在Windows平臺(tái)下安裝,安裝方式也是比較簡(jiǎn)單的,直接安裝visual studio全家桶(舉幾個(gè)常見(jiàn)的例子,visual C++6.0,visual studio2010,visual studio2017都有該編譯器),就會(huì)附帶MSVC編譯器,一般來(lái)說(shuō)直接使用VS全家桶就可以達(dá)到很不錯(cuò)的學(xué)習(xí)效果,但如果你想要單獨(dú)使用代碼編輯器加編譯器的開(kāi)發(fā)方式,可以參考這篇文章:VSCode配置C++環(huán)境的方法步驟(MSVC)

MinGW的安裝也是比較簡(jiǎn)單的,如果使用codeblock的話(huà)有些版本是有自帶MinGW的,可以直接使用這些MinGW,在這篇文章VSCode配置C++環(huán)境的方法步驟(MinGW)中兩款工具也都提供了MinGW的下載,想單獨(dú)使用代碼編輯器+編譯器的開(kāi)發(fā)方式也可以直接參考該文章。接下來(lái)我們講講如何單獨(dú)安裝MinGW。

下載鏈接:sourceforge

下載后直接按照要求安裝即可。

 注意,下載的是安裝器,安裝器本體比較小,需要聯(lián)網(wǎng)獲取MinGW的本體,整體安裝大概需要400M到600M左右,版本不同大小也不同。

安裝完成后可以在安裝路徑下找到MinGW64的文件夾,將其中的bin文件夾添加到環(huán)境變量中即可。

安裝文件夾

 囿于篇幅原因,MinGW的詳細(xì)安裝部分小編放在單獨(dú)的一篇文章中介紹,小伙伴可以前往:如何安裝MinGW?GCC編譯器安裝教程!查看

編輯代碼

使用記事本或者代碼編輯器寫(xiě)一段程序(這里不推薦使用記事本,小編使用vscode)。

源代碼

首先通過(guò)命令行進(jìn)入你準(zhǔn)備要?jiǎng)?chuàng)建文件的目錄下進(jìn)行后續(xù)操作。

編譯過(guò)程

編譯過(guò)程分為四個(gè)步驟:預(yù)處理、編譯、匯編、鏈接。

1.預(yù)處理

預(yù)處理主要處理源文件中的“#include”、“#define”等預(yù)處理命令。

預(yù)處理主要完成的工作有:

(1)刪除#define,展開(kāi)宏;

(2)處理?xiàng)l件編譯指令,預(yù)處理程序先判斷條件,在根據(jù)條件修改源代碼;

(3)刪除注釋?zhuān)?/p>

(4)添加行號(hào),以及文件名標(biāo)識(shí),便于調(diào)試

(5)刪除“#include”,插入相應(yīng)的頭文件;

使用?g++ -E test.cpp -o test.i??命令,預(yù)處理后得到?test.i?文件

預(yù)處理

2.編譯

生成匯編代碼的過(guò)程,使用命令?g++ -S test.i -o test.s.?生成匯編文件?test.s?文件,當(dāng)然直接從?test.cpp?文件得到匯編文件也可以。

編譯成匯編

3.匯編

將匯編代碼轉(zhuǎn)化成機(jī)器指令,生成目標(biāo)二進(jìn)制代碼。

使用命令?g++ -c test.s -o test.o?生成?test.o?文件

匯編轉(zhuǎn)化為機(jī)器指令

4.鏈接

通過(guò)鏈接庫(kù)文件,將目標(biāo)文件轉(zhuǎn)化成可執(zhí)行文件

使用命令?g++ test.o -o test.exe?

鏈接

當(dāng)然,一般情況下,可以直接使用?g++ test.cpp -o test? 就可以生成可執(zhí)行程序了。

運(yùn)行程序

最后使用命令test.exe,即可運(yùn)行程序。

命令行運(yùn)行程序

也可以直接點(diǎn)擊exe文件進(jìn)行運(yùn)行。

點(diǎn)擊運(yùn)行

編譯器使用小結(jié)

通常情況下我們并不會(huì)手動(dòng)編譯,而是借助代碼編輯器的插件功能(比如上面介紹的vscode)或者IDE集成化項(xiàng)目構(gòu)建,但是手動(dòng)編譯的技術(shù)也是相當(dāng)重要的,小伙伴們應(yīng)該學(xué)習(xí)一下。

總結(jié)

以上就是關(guān)于C語(yǔ)言編譯器的全部介紹,希望能對(duì)各位小伙伴有所幫助。


C C++

2 人點(diǎn)贊