目錄
一、常用編程語言的編譯器(compiler)概述
二、GCC、MinGW、MinGW-w64 、TDM-GCC、Cygwin、MSYS、MSYS2的區(qū)別
三、MinGW-w64編譯器套件下載及安裝
四、MinGW-w64安裝后,windows環(huán)境變量配置(設(shè)置)
五、編譯器的運(yùn)行及其與開發(fā)環(huán)境的關(guān)系、編譯器的來源
編譯器(Compiler)及c/c++編譯器安裝(c+安裝)
一、常用編程語言的編譯器(compiler)概述
? ? ? ?機(jī)器語言是一種計(jì)算機(jī)指令(instruction)的表達(dá),計(jì)算機(jī)根據(jù)這種指令語句能直接解讀(識(shí)別)并執(zhí)行,這種機(jī)器指令語句通常稱為機(jī)器碼(machine instruction statement),是通過高低電平(高電壓叫高電平,低電壓叫低電平)來表示1和0的二進(jìn)制。
? ? ? ?一條機(jī)器碼必須包括操作碼和地址碼(或稱為操作數(shù))兩部分。操作碼指出執(zhí)行操作的類型(比如:加、減、乘、除、傳送等),地址碼指出參與操作的數(shù)據(jù)和操作結(jié)果存放的位置。
? ? ? ?每個(gè)CPU都有一套指令集(instruction set),在CPU中表現(xiàn)為邏輯門電路。一條機(jī)器碼的操作碼實(shí)際就是對(duì)應(yīng)到了CPU指令集中的一條指令,也即對(duì)應(yīng)到了CPU中的邏輯門電路,因而,cpu能解讀(識(shí)別)這條機(jī)器碼(機(jī)器指令語句),然后, CPU會(huì)對(duì)該機(jī)器指令語句進(jìn)一步分解為最基本的動(dòng)作,以便計(jì)算機(jī)按最基本的動(dòng)作執(zhí)行,這個(gè)屬于最后的實(shí)施環(huán)節(jié)。因此,cpu對(duì)機(jī)器碼(機(jī)器指令語句)能直接解讀并執(zhí)行的,但cpu是不能解讀以二進(jìn)制存儲(chǔ)的代碼,因?yàn)檫@種二進(jìn)制不在它的指令集范疇里,無法產(chǎn)生識(shí)別和執(zhí)行。
? ? ? ? 機(jī)器碼(機(jī)器指令語句)與機(jī)器中的具體的操作、存儲(chǔ)地址密切相關(guān),是能被CPU直接解讀(識(shí)別)并執(zhí)行的(因?yàn)镃PU存在實(shí)現(xiàn)這些具體操作的邏輯門電路),因此,機(jī)器碼是編程語言的編譯器(Compiler,廣義上的稱呼)處理代碼的最終目標(biāo)。
? ? ? C和C++通過編譯器(Compiler)即可把代碼編譯成機(jī)器碼,計(jì)算機(jī)根據(jù)機(jī)器碼即可執(zhí)行,而Java、Python是把代碼先編譯成字節(jié)碼,然后再把字節(jié)碼編譯成機(jī)器碼并執(zhí)行,前者從整體上講只需要一次編譯,編譯完成后再執(zhí)行,后者相對(duì)獨(dú)立地進(jìn)行了兩次編譯(第二次是編譯和執(zhí)行)??梢姡惭bC語言或安裝C++不像安裝Java或Python,前者只需要安裝一個(gè)編譯器,就可以運(yùn)行程序,而后者需要安裝編譯器+虛擬機(jī),比如:python的解釋器就是由編譯器+虛擬機(jī)構(gòu)成。因此,C語言安裝或C++安裝與Java或Python安裝是存在很大差異的,這主要由兩者處理過程的特點(diǎn)決定了。
? ? ? ?但從廣義上講,Java或Python安裝的也是一種編譯器,只是這種編譯器比較特殊,它經(jīng)歷兩次相對(duì)獨(dú)立的翻譯,而且第二次實(shí)現(xiàn)一邊翻譯一邊執(zhí)行,正因?yàn)檫@個(gè)特點(diǎn),第二次的翻譯執(zhí)行稱為虛擬機(jī),而C或C++的編譯器從整體上講只有一次翻譯,翻譯完成后生成機(jī)器碼特點(diǎn)的文件,生成的這種文件與所在計(jì)算機(jī)系統(tǒng)密切相關(guān)(一個(gè)能在計(jì)算機(jī)上執(zhí)行的文件與這臺(tái)計(jì)算機(jī)的操作系統(tǒng)和硬件系統(tǒng)是密切相關(guān)的,與之相適應(yīng)才能執(zhí)行),因此,C或C++缺乏跨平臺(tái)性、可移植性,而Java或Python第一次編譯生成的字節(jié)碼,與所在計(jì)算機(jī)的系統(tǒng)不相關(guān),它只是對(duì)代碼的一次梳理,并不與計(jì)算機(jī)系統(tǒng)關(guān)聯(lián),在第二次翻譯執(zhí)行的時(shí)候才與計(jì)算機(jī)系統(tǒng)密切相關(guān),因此,Java或Python第一次編譯的字節(jié)碼形式確保了它們的跨平臺(tái)性(cross platform)、可移植性(portability),這也是它們的一種優(yōu)勢。
? ? ? ?任何編程語言的安裝,實(shí)際主要就是安裝一種對(duì)這種代碼語言具有翻譯能力的文件(簡稱編譯器),這種翻譯功能就是把代碼轉(zhuǎn)換為最終的機(jī)器碼,CPU然后根據(jù)機(jī)器碼執(zhí)行。其它附加的安裝更多的是為了給用戶提供便利,完全可以去掉這些附加的功能,僅用翻譯功能我們也能實(shí)現(xiàn)這些附加功能,只是這會(huì)考驗(yàn)我們的能力和占用我們更多的開發(fā)時(shí)間,因此,有的編程語言安裝會(huì)占用存儲(chǔ)空間很大,其實(shí)是增加了很多附加功能,比如:matlab,它提供了大量的計(jì)算工具,因?yàn)檫@種語言側(cè)重?cái)?shù)學(xué)計(jì)算。
? ? ? 只要我們寫的代碼符合c或c++規(guī)范,編譯器能把這些代碼翻譯成計(jì)算機(jī)能直接執(zhí)行的機(jī)器碼(機(jī)器指令),然后CPU依據(jù)這些指令執(zhí)行,從而實(shí)現(xiàn)程序的運(yùn)行。下面我們先了解幾款與c\c++編譯器有關(guān)的、可以在Windows平臺(tái)上支持GCC的軟件,再介紹C\C++編譯器的安裝。
二、GCC、MinGW、MinGW-w64 、TDM-GCC、Cygwin、MSYS、MSYS2的區(qū)別
? ? ? GCC(GNU Compiler Collection) ,GNU編譯器套件。GCC原名為GNU C語言編譯器(GNU C Compiler),只能處理C語言,經(jīng)過擴(kuò)展能夠支持C、C++、 Objective-C、 Objective-C++、Fortran、Ada、Modula-2和Go多種編程語言,所以改名GNU編譯器套件(GNU Compiler Collection)。GCC不完全支持Java、Python的編譯,但Java、Python底層的C實(shí)現(xiàn)會(huì)用到C編譯器。
? ? ? GCC的初衷是為GNU操作系統(tǒng)專門編寫一款編譯器,現(xiàn)已被大多數(shù)類Unix操作系統(tǒng)(比如:Linux、BSD、MacOS X等)采納為標(biāo)準(zhǔn)的編譯器。
? ? ? ?GCC在Windows平臺(tái)上的支持并不完善,缺乏兼容性,用GCC在Windows上開發(fā)應(yīng)用程序存在很多問題。下面幾款編譯軟件具有各自特點(diǎn),含有GCC且適合Windows平臺(tái)。
1、MinGW、MinGW-w64 、TDM-GCC
? ? ? ?MinGW、MinGW-w64 與TDM-GCC是基于GCC而適合Windows操作系統(tǒng)的編譯器套件(編譯器集成包)。
? ? ? ?MinGW將GCC移植到Windows上?,但僅支持32位應(yīng)用程序,MinGW-w64衍生于MinGW,不僅可以支持32位應(yīng)用程序,還可以支持64位。TDM-GCC是非官方組織提供及維護(hù)的編譯器套件,支持32位和64位應(yīng)用程序。
2、Cygwin、MSYS、MSYS2
? ? ? ?Cygwin、MSYS、MSYS2都是代表可以在Windows上運(yùn)行的環(huán)境,不是單純的編譯器套件,它們都支持Windows,因而,其內(nèi)置的GCC也可以在Windows平臺(tái)上使用。
? ? ? ?Cygwin是一個(gè)可以在Windows上運(yùn)行的?UNiX模擬環(huán)境(虛擬環(huán)境),它提供UNIX 模擬 DLL 以及在其上層構(gòu)建的多種可以在 Linux 系統(tǒng)中找到的軟件包(其中含有GCC),這使得GCC可以在Windows平臺(tái)上使用。
? ? ? ?MSYS(Minimal GNU(POSIX) system on Windows )是一個(gè)小型的可以在Windows上運(yùn)行的GNU環(huán)境。GNU的設(shè)計(jì)類似Unix,但它不包含具著作權(quán)的Unix代碼。POSIX為可移植操作系統(tǒng)接口(Portable Operating System Interface of UNIX,縮寫為 POSIX)。接口可以理解為不同組成部分銜接的約定。
? ? ? ?MSYS2是一個(gè)MSYS的獨(dú)立改寫版本,也是一個(gè)在Cygwin(POSIX)和 MinGW-w64基礎(chǔ)上產(chǎn)生的Windows 軟件。
? ? ? ?因此,MSYS、MSYS2也使得GCC可以在Windows平臺(tái)上使用。
三、MinGW-w64編譯器套件下載及安裝
? ? ? ?上面介紹了幾款可以在Windows平臺(tái)上支持GCC的軟件。我們可以根據(jù)自己的需求下載相應(yīng)的編譯軟件,下面表3-1提供了可在Windows平臺(tái)上運(yùn)行的常用的編譯軟件的下載地址。
表3-1在Windows平臺(tái)上支持GCC的常用軟件
GCC官網(wǎng)地址 |
http://gcc.gnu.org/ |
MinGW-w64官網(wǎng)地址 |
https://www.mingw-w64.org/ |
TDM-GCC官網(wǎng)地址 |
https://jmeubank.github.io/tdm-gcc/ |
Cygwin官網(wǎng)地址 |
https://www.cygwin.com/ |
MSYS2官網(wǎng)地址 |
https://www.msys2.org/ |
? ? ? ?MinGW-w64開源,且有活躍的開源社區(qū)維護(hù),這里,我們選擇安裝MinGW-w64編譯器套件。打開表3-1中MinGW-w64官網(wǎng)地址,如圖3-1所示。
圖3-1? MinGW-w64官網(wǎng)地址
? ? ?點(diǎn)擊圖3-1中紅箭頭位置,在彈出的菜單中點(diǎn)擊Downloads選項(xiàng),進(jìn)入下載頁面(也即https://www.mingw-w64.org/downloads),該頁面的Pre-built toolchains and packages標(biāo)題下面是預(yù)構(gòu)建的工具鏈和軟件包,也即含有GCC/Mingw-w64的特定工具的整合包,而我們只需要下載MinGW-w64,可以下拉頁面到如圖3-2紅框的Sources位置。
?圖3-2? MinGW-w64下載鏈接
? ? 點(diǎn)擊圖3-2紅箭頭所指的SourceForge內(nèi)鏈,進(jìn)入MinGW-w64下載頁面(也即https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/),如圖3-3所示。
圖3-3? MinGW-w64下載頁
? ? ? ?圖3-3紅框中是不同時(shí)間、類型的MinGW-w64的源代碼(源碼)下載,紅色箭頭處為最近更新的MinGW-w64的源代碼(源碼),這些源碼不是安裝程序,因而是沒有bin文件夾的(bin文件夾有安裝后的可執(zhí)行文件,我們?cè)谂渲铆h(huán)境變量時(shí)需要用到這個(gè)文件夾)。
? ? ? ?我們需要使用MinGW-w64的可執(zhí)行文件用來產(chǎn)生編譯功能,因而我們需要下載MinGW-w64的安裝程序,安裝后即可獲得可執(zhí)行文件,下拉頁面到如圖3-4所示位置。注意,這里講的可執(zhí)行文件是指已經(jīng)被編譯處理過且能執(zhí)行的文件(也稱為機(jī)器碼文件或機(jī)器碼構(gòu)成的二進(jìn)制文件),上面提到的源碼是沒被編譯過的。
圖3-4? MinGW-w64安裝程序
? ? ? ?圖3-4中①、②為最新版本的MinGW-w64,第①個(gè)紅框是在線安裝MinGW-w64,若訪問外網(wǎng)速度比較慢,可以選下載擇第②個(gè)紅框的壓縮包,這個(gè)壓縮包是MinGW-w64已生成的可執(zhí)行文件,解壓后即可用,當(dāng)然,不論哪種方式,都需要配置環(huán)境變量后MinGW-w64的可執(zhí)行文件才能在windows中運(yùn)行。
? ? ? ?這里我們選擇下載第二個(gè)紅框的壓縮包。在下載壓縮包之前我們需要了解圖3-4中第②個(gè)紅框壓縮包名稱中參數(shù)的含義,下面表3-2列出了其參數(shù)的代表的含義。
表3-2? MinGW-w64版本類型
參數(shù)類型 |
參數(shù) |
說明 |
CPU架構(gòu) |
x86_64 |
64位 |
i686 |
32位 |
|
操作系統(tǒng)接口協(xié)議 |
win32 |
開發(fā)windows的應(yīng)用程序 |
posix |
開發(fā)Linux、Mac的應(yīng)用程序 |
|
異常處理模型 |
sjlj |
版本低,可支持32位和64位 |
seh |
版本新,性能較好,只支持64位 |
|
dwarf |
版本新,性能較好,只支持32位 |
? ? ? 根據(jù)表3-2,我們可以下載?x86_64-win33-seh這個(gè)版本,解壓后就是已經(jīng)安裝生成的可執(zhí)行文件,相當(dāng)于圖3-4中第①個(gè)紅框(MinGW-W64-install.exe)下載后在線安裝的結(jié)果。
? ? ? ?另外,上述表3-2中的參數(shù)實(shí)際也是圖3-4中第①個(gè)紅框(MinGW-W64-install.exe)下載后的在線安裝時(shí)的安裝選項(xiàng)設(shè)置,這里不再列舉第①個(gè)紅框下載后的安裝過程,其選項(xiàng)配置可參考表3-2中參數(shù)的含義。
四、MinGW-w64安裝后,windows環(huán)境變量配置(設(shè)置)
? ? ? ?環(huán)境變量是在操作系統(tǒng)中一個(gè)具有特定名字的對(duì)象,它代表了一個(gè)或者多個(gè)應(yīng)用程序所將使用到的信息。當(dāng)要求系統(tǒng)運(yùn)行一個(gè)程序而沒有告訴它程序所在的完整路徑時(shí),系統(tǒng)除了在當(dāng)前目錄下面尋找此程序外,還會(huì)到環(huán)境變量path中指定的路徑去找可運(yùn)行的對(duì)象。
? ? ? ?環(huán)境變量中的系統(tǒng)變量是對(duì)所有用戶有效,用戶變量是對(duì)當(dāng)前登錄的windows賬號(hào)有效,當(dāng)系統(tǒng)變量查找不到時(shí),會(huì)到當(dāng)前用戶變量中查找。另外,環(huán)境變量名稱是不區(qū)分大小寫的,比如:PATH和path,兩個(gè)名稱是一樣的。
? ? ? ?因此,為方便調(diào)用MinGW-w64編譯器軟件,我們需要配置環(huán)境變量(environment variable),把MinGW-w64安裝后的bin文件夾所在的路徑設(shè)置為環(huán)境變量的值,以方便調(diào)用可執(zhí)行文件。??
? ? ? ?上面我們是下載壓縮文件直接解壓MinGW-w64的安裝,若我們是下載的安裝程序(即圖3-4中第①個(gè)紅框)安裝,也需要設(shè)置環(huán)境變量(environment variable),但很多安裝程序在安裝時(shí)會(huì)提示設(shè)置環(huán)境變量。
? ? ? ? 下面我們介紹環(huán)境變量的配置(Configuration)。鼠標(biāo)右鍵電腦圖標(biāo)如圖4-1所示。
圖4-1 電腦屬性
? ? ? ? ?在圖4-1菜單中單擊屬性,進(jìn)入圖4-2中的電腦設(shè)置界面。
圖4-2 電腦設(shè)置
? ? ? ? 在圖4-2中單擊紅色箭頭處的高級(jí)系統(tǒng)設(shè)置,進(jìn)入圖4-3系統(tǒng)設(shè)置界面。
圖4-3 系統(tǒng)屬性
? ? ? ? 在圖4-3中單擊紅色箭頭處的環(huán)境變量,進(jìn)入圖4-4環(huán)境變量界面。
圖4-4 環(huán)境變量
? ? ? ?根據(jù)上面提到的環(huán)境變量的特點(diǎn),我們可以選擇圖4-4中紅框的系統(tǒng)變量Path變量,然后單擊紅色箭頭處的編輯,或雙擊Path變量,進(jìn)入圖4-5編輯環(huán)境變量界面。
圖4-5 編輯環(huán)境變量
? ? ? ? ?在圖4-5中單擊紅色箭頭處的新建,進(jìn)入圖4-6環(huán)境變量界面。
圖4-6 新建環(huán)境變量
? ? ? ?如圖4-6所示輸入MinGW-W64的安裝路徑,路徑應(yīng)該含有bin目錄,即一般為…\mingw64\bin。
? ? ? ? ?bin目錄有cpp.exe、gcc.exe、g++.exe、gdb.exe等可執(zhí)行文件,其中,cpp.exe是預(yù)處理器,g++/gcc.exe是編譯器,gdb.exe是調(diào)試器,as.exe 是匯編器,ld.exe是鏈接器。
? ? ? ?新建環(huán)境變量輸入完成后單擊確定,單擊所有的確定后,環(huán)境變量配置成功。在調(diào)用時(shí),當(dāng)未指明路徑時(shí)系統(tǒng)會(huì)自動(dòng)進(jìn)入該配置的位置匹配調(diào)用。
? ? ? ?上面配置完后,我們使用win+r快捷鍵(也即Windows+R)打開運(yùn)行窗口,輸入cmd并確定,打開cmd命令行窗口,在命令行窗口中輸入gcc -v,查看gcc的版本信息,從而可以確定gcc是否安裝并且環(huán)境變量配置成功,v可以理解為version的簡寫,如圖4-7所示為安裝成功且配置成功。
圖4-7 gcc版本信息
? ? ? ?至此,MinGW-W64 install及環(huán)境變量配置完成,也相當(dāng)于c install(或c++ install)完成,在windows中可以使用編譯器進(jìn)行C/C++程序開發(fā)了。
五、編譯器的運(yùn)行及其與開發(fā)環(huán)境的關(guān)系、編譯器的來源
1、編譯器的運(yùn)行及其與開發(fā)環(huán)境的關(guān)系
? ? ? ?編譯器是由文件構(gòu)成,我們還需要工具運(yùn)行這些可執(zhí)行文件,也即調(diào)用編譯器(Compiler)進(jìn)行編譯,來實(shí)現(xiàn)程序開發(fā)的作用。cmd.exe是 Windows 系統(tǒng)的一種命令行操作工具,用戶可以通過輸入命令來完成各種各樣的系統(tǒng)或程序操作。
? ? ? ? 對(duì)于任何一門編程語言,只要安裝了這個(gè)編程語言的編譯器,我們可以用文本編輯器(txt文件)寫好代碼,然后保存為編程語言的格式(即把.txt后綴改為編程語言的后綴),可以通過cmd命令提示窗調(diào)用這個(gè)編程語言的編譯器運(yùn)行這個(gè)編寫好的代碼文件。上面我們安裝的MinGW-W64編譯器套件是適合windows平臺(tái)的,我們可以使用windows的命令提示符cmd.exe來運(yùn)行編譯器,進(jìn)行C/C++程序開發(fā)。
? ? ? ?cmd運(yùn)行C/C++程序代碼參見Windows的cmd運(yùn)行編譯器(cmd運(yùn)行c/c++、python等)。
? ? ? ?在windows中,除了上述CMD命令調(diào)用編譯器的方法,我們還可以用集成開發(fā)環(huán)境(Integrated Development Environment,簡寫IDE)工具來運(yùn)行編譯器,進(jìn)行程序代碼開發(fā)。
? ? ? ?集成開發(fā)環(huán)境工具是帶有一整套可以幫助我們提高語言開發(fā)效率的工具(比如:代碼編輯、調(diào)試、語法高亮、智能提示(intellisense)等),可以提高項(xiàng)目開發(fā)、管理效率。在集成開發(fā)環(huán)境工具中設(shè)置好編譯器(也即調(diào)用編譯器)就可以實(shí)現(xiàn)基于該編譯器的程序代碼開發(fā),編譯器提供了編程語言的翻譯功能,集成開發(fā)環(huán)境工具僅是提供了開發(fā)程序的便利性的輔助作用,簡單地講,集成開發(fā)環(huán)境就是我們編程的輔助工具,方便我們編寫代碼,但真正實(shí)現(xiàn)編程語言的程序運(yùn)行的還是編譯器,集成開發(fā)環(huán)境會(huì)調(diào)用編譯器運(yùn)行程序。
? ? ? ?編程語言(C/C++、Java、Python、Matlab等)一般都是借助集成開發(fā)環(huán)境(IDE)來開發(fā),這樣可以提高編寫代碼的效率,有的編程語言有自帶的IDE,比如:python有自帶的IDLE工具,但是一個(gè)簡單的IDE,其操作有局限性,因而,一般使用其它IDE(比如:pycharm)進(jìn)行編寫代碼,matlab.exe啟動(dòng)的界面就是一個(gè)自帶的IDE(默認(rèn)調(diào)用matlab的編譯器),這個(gè)IDE功能比較全面,因而使用matab語言一般也是使用其自帶的IDE。
? ? ? ?VS Code代碼編輯器雖然定位為編輯器,實(shí)際也具有集成開發(fā)環(huán)境工具的基本功能,由于是免費(fèi)的,因而很受用戶青睞,可以用在C/C++、Java、Python等程序開發(fā)。我們也可以用VS Code工具進(jìn)行C/C++開發(fā),參見2023年最新VS Code安裝詳細(xì)教程及vs code配置。
? ? ? ?此外,在windows的powershell.exe命令行中也可以運(yùn)行編譯器,powershell.exe命令行的功能比cmd.exe命令行更強(qiáng)大,但當(dāng)powershell.exe中運(yùn)行生成的.exe文件一般需要在文件名前面增加.\才能運(yùn)行。
? ? ? ?編譯器(Compiler)需要cmd.exe、或PowerShell.exe、或IDE(集成開發(fā)環(huán)境)調(diào)用運(yùn)行,實(shí)際也是讓操作系統(tǒng)參與進(jìn)來,發(fā)揮操作系統(tǒng)的作用(計(jì)算機(jī)資源分配),從而順利實(shí)現(xiàn)程序的運(yùn)行。
2、編譯器的來源
? ? ? ?上面我們提到源代碼(源碼),也就是我們根據(jù)語言的規(guī)范寫的代碼,也是沒有編譯過的代碼,只有通過編譯器翻譯成機(jī)器碼后才能執(zhí)行。那么一種編程語言誕生后,它并沒有誕生編譯器,它是如何運(yùn)行的呢?最開始是借助其它編譯器來運(yùn)行,然后再根據(jù)這個(gè)語言寫一個(gè)編譯器源碼文件,讓其它語言的編譯器把這個(gè)語言寫的編譯器源碼文件編譯成可執(zhí)行文件,通過不斷完善,從而最終誕生這個(gè)語言的可執(zhí)行的編譯器(可執(zhí)行文件,也即一個(gè)由機(jī)器碼構(gòu)成的文件,計(jì)算機(jī)根據(jù)機(jī)器碼就可以執(zhí)行)。
? ? ? ?計(jì)算機(jī)誕生時(shí),最初的計(jì)算機(jī)功能很簡單,因而,最初的編譯器用人來擔(dān)任,把人寫的語句翻譯成機(jī)器語言,讓機(jī)器執(zhí)行。但隨著計(jì)算機(jī)功能的增強(qiáng),機(jī)器指令不斷增加,由人來實(shí)現(xiàn)翻譯工作,很容易出錯(cuò),而且工作繁瑣,人很難勝任,整個(gè)過程上講計(jì)算機(jī)的工作效率低,尤其當(dāng)出現(xiàn)標(biāo)準(zhǔn)的編程語言規(guī)范時(shí),就更需要一個(gè)能把編程語言翻譯成機(jī)器碼的自動(dòng)化操作。
? ? ? ?針對(duì)這種現(xiàn)狀,伴隨著由機(jī)器語言發(fā)展出匯編語言,計(jì)算機(jī)工作者開始用機(jī)器碼來實(shí)現(xiàn)一個(gè)編譯器,用來把匯編語言的源碼編譯(翻譯)成機(jī)器碼,讓機(jī)器執(zhí)行。通過這種方式讓匯編程序代碼能夠在機(jī)器上運(yùn)行,然后就可以用匯編語言編寫一個(gè)有關(guān)自身的編譯器源碼文件,并讓由機(jī)器碼實(shí)現(xiàn)的編譯器把這個(gè)匯編語言寫的編譯器源碼文件編譯成可執(zhí)行文件,再通過不斷完善,從而最終誕生這個(gè)匯編語言的可執(zhí)行的編譯器文件,這也就實(shí)現(xiàn)了用一種編程語言實(shí)現(xiàn)該語言自身的編譯器,這也稱為這種編程語言的自舉(Bootstrapping)。
? ? ? ?同理,當(dāng)其它語言誕生時(shí),可以借助匯編語言的編譯器生成一個(gè)該語言的可執(zhí)行的編譯器。比如:匯編語言→B語言→C語言,c語言可以通過匯編語言的編譯器實(shí)現(xiàn)自舉,生成c語言本身的編譯器,然后,c語言代碼可以利用自身的這個(gè)c編譯器實(shí)現(xiàn)編譯,翻譯成cpu可以執(zhí)行的機(jī)器碼,從而實(shí)現(xiàn)c語言代碼的運(yùn)行。
? ? ? ?C語言是比較接近機(jī)器底層,而又比較適合人閱讀的語言,由于接近機(jī)器底層,對(duì)硬件操作有優(yōu)勢,運(yùn)行速度快,因而,c語言自然得到用戶的肯定,c編譯器也是被其它語言引用比較廣泛的編譯器。
? ? ? ?因此,編譯器是由人、機(jī)器碼、匯編、c等一步步發(fā)展出來的,誕生的編程語言都是依靠已經(jīng)誕生的語言的編譯器來實(shí)現(xiàn)自舉(Bootstrapping),產(chǎn)生自身的編譯器。
2023年最新VS Code安裝詳細(xì)教程及vs code配置:
https://blog.csdn.net/thefg/article/details/131752996
Windows的cmd運(yùn)行編譯器(cmd運(yùn)行C/C++):文章來源:http://www.zghlxwxcb.cn/news/detail-731264.html
https://blog.csdn.net/thefg/article/details/132017498文章來源地址http://www.zghlxwxcb.cn/news/detail-731264.html
最后, 歡迎你點(diǎn)贊、收藏、關(guān)注!
到了這里,關(guān)于編譯器(Compiler)及C/C++編譯器安裝(c+安裝)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!