當前位置:首頁 » 編程語言 » c語言的編譯器和前端編譯器
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言的編譯器和前端編譯器

發布時間: 2023-01-08 05:32:44

㈠ 在c語言中「可執行程序」是什麼意思

C語言中的可執行程序就是將用文本信息表示的程序翻譯成計算機認識的二進制代碼串。

首先,我們先用C語言把源代碼寫好,然後交給C語言編譯器。C語言編譯器內部分為前端和後端。

(1)編譯器前端

前端負責將C語言代碼進行詞法和語法上的解析,然後可以生成中間代碼。

中間代碼這部分不是必須的,但是它能夠為程序的跨平台移植帶來諸多好處。比如,同樣的一份C語言源代碼在一台計算機上編譯完之後,生成一套中間代碼。

然後針對不同的目標平台(比如要將這一套代碼分別編譯成 ARM 處理器的二進制機器碼、MIPS 處理器的二進制機器碼以及 x86 處理器的二進制機器碼),只需要編寫相應目標平台的編譯器後端即可。

所以,這么做就可以把編譯器的前端與後端剝離開來(這在軟體工程上又可稱為解耦合),不同處理器廠商可以針對自家的處理器特性,對中間代碼生成到目標二進制代碼的過程再度進行優化。

(2)編譯器後端

接下來,由C語言編譯器後端生成源文件相應的目標文件。

目標文件在 Windows 系統上往往是.obj文件,而在 Unix/Linux 系統上往往是.o文件,C語言的源文件在所有平台上都統一用.c文件表示。

(3)鏈接器

最後,對於各個獨立的目標文件,通過連接器將它們合並成一個最終可執行文件。

(1)c語言的編譯器和前端編譯器擴展閱讀:

起初,C語言沒有官方標准。1978年由美國電話電報公司(AT&T)貝爾實驗室正式發表了C語言。布萊恩·柯林漢(Brian Kernighan) 和 丹尼斯·里奇(Dennis Ritchie) 出版了一本書,名叫《The C Programming Language》。

這本書被 C語言開發者們稱為K&R,很多年來被當作 C語言的非正式的標准說明。人們稱這個版本的 C語言為K&R C。

K&R C主要介紹了以下特色:

結構體(struct)類型

長整數(long int)類型

無符號整數(unsigned int)類型

把運算符=+和=-改為+=和-=。因為=+和=-會使得編譯器不知道使用者要處理i = -10還是i =- 10,使得處理上產生混淆。

即使在後來ANSI C標准被提出的許多年後,K&R C仍然是許多編譯器的最 准要求,許多老舊的編譯器仍然運行K&R C的標准。

1970到80年代,C語言被廣泛應用,從大型主機到小型微機,也衍生了C語言的很多不同版本。

1983年,美國國家標准協會(ANSI)成立了一個委員會X3J11,來制定 C語言標准。

1989年,美國國家標准協會(ANSI)通過了C語言標准,被稱為ANSI X3.159-1989 "Programming Language C"。因為這個標準是1989年通過的,所以一般簡稱C89標准。有些人也簡稱ANSI C,因為這個標準是美國國家標准協會(ANSI)發布的。

1990年,國際標准化組織(ISO)和國際電工委員會(IEC)把C89標準定為C語言的國際標准,命名為ISO/IEC 9899:1990 - Programming languages -- C 。因為此標準是在1990年發布的,所以有些人把簡稱作C90標准。不過大多數人依然稱之為C89標准,因為此標准與ANSI C89標准完全等同。

1994年,國際標准化組織(ISO)和國際電工委員會(IEC)發布了C89標准修訂版,名叫ISO/IEC 9899:1990/Cor 1:1994 ,有些人簡稱為C94標准。

1995年,國際標准化組織(ISO)和國際電工委員會(IEC)再次發布了C89標准修訂版,名叫ISO/IEC 9899:1990/Amd 1:1995 - C Integrity ,有些人簡稱為C95標准。

C99標准

1999年1月,國際標准化組織(ISO)和國際電工委員會(IEC)發布了C語言的新標准,名叫ISO/IEC 9899:1999 - Programming languages -- C ,簡稱C99標准。這是C語言的第二個官方標准。

參考資料:網路-c語言

㈡ 適合win10系統的c語言編譯器

桌面操作系統

對於當前主流桌面操作系統而言,可使用 VisualC++、GCC以及 LLVM Clang 這三大編譯器。

Visual C++(簡稱 MSVC)只能用於 Windows 操作系統;GCC 和 LLVM Clang除了可用於Windows操作系統之外,主要用於 Unix/Linux操作系統。

像現在很多版本的 Linux 都默認使用 GCC 作為C語言編譯器,而像 FreeBSD、macOS 等系統默認使用 LLVM Clang 編譯器。由於當前 LLVM 項目主要在 Apple 的主推下發展的,所以在 macOS中,Clang 編譯器又被稱為 Apple LLVM 編譯器。

MSVC 編譯器主要用於 Windows 操作系統平台下的應用程序開發,它不開源。用戶可以使用 Visual Studio Community 版本來免費使用它,但是如果要把通過 Visual Studio Community 工具生成出來的應用進行商用,那麼就得好好閱讀一下微軟的許可證和說明書了。

而使用 GCC 與 Clang 編譯器構建出來的應用一般沒有任何限制,程序員可以將應用程序隨意發布和進行商用。

MSVC 編譯器對 C99 標準的支持就十分有限,加之它壓根不支持任何 C11 標准,所以本教程中設計 C11 的代碼例子不會針對 MSVC 進行描述。所幸的是,Visual Studio Community 2017 加入了對 Clang 編譯器的支持,官方稱之為——Clang with Microsoft CodeGen,當前版本基於的是 Clang 3.8。

也就是說,應用於 Visual Studio 集成開發環境中的 Clang 編譯器前端可支持 Clang 編譯器的所有語法特性,而後端生成的代碼則與 MSVC 效果一樣,包括像 long 整數類型在 64 位編譯模式下長度仍然為 4 個位元組,所以各位使用的時候也需要注意。

為了方便描述,本教程後面涉及 Visual Studio 集成開發環境下的 Clang 編譯器簡稱為 VS-Clang 編譯器。

嵌入式系統

而在嵌入式系統方面,可用的C語言編譯器就非常豐富了,比如:

  • 用於 Keil 公司 51 系列單片機的 Keil C51 編譯器;

  • 當前大紅大紫的 Arino 板搭載的開發套件,可用針對 AVR 微控制器的 AVRGCC 編譯器;

  • ARM 自己出的 ADS(ARM Development Suite)、RVDS(RealView Development Suite)和當前最新的 DS-5 Studio;

  • DSP 設計商 TI(Texas Instruments)的 CCS(Code Composer Studio);

  • DSP 設計商 ADI(Analog Devices,Inc.)的 Visual DSP++ 編譯器,等等。


  • 通常,用於嵌入式系統開發的編譯工具鏈都沒有免費版本,而且一般需要通過國內代理進行購買。所以,這對於個人開發者或者嵌入式系統愛好者而言是一道不低的門檻。


  • 不過 Arino 的開發套件是可免費下載使用的,並且用它做開發板連接調試也十分簡單。Arino 所採用的C編譯器是基於 GCC 的。


  • 還有像樹莓派(Raspberry Pi)這種迷你電腦可以直接使用 GCC 和 Clang 編譯器。此外,還有像 nVidia 公司推出的 Jetson TK 系列開發板也可直接使用 GCC 和 Clang 編譯器。樹莓派與 Jetson TK 都默認安裝了 Linux 操作系統。


  • 在嵌入式領域,一般比較低端的單片機,比如 8 位的 MCU 所對應的C編譯器可能只支持 C90 標准,有些甚至連 C90 標準的很多特性都不支持。因為它們一方面內存小,ROM 的容量也小;另一方面,本身處理器機能就十分有限,有些甚至無法支持函數指針,因為處理器本身不包含通過寄存器做間接過程調用的指令。


  • 而像 32 位處理器或 DSP,一般都至少能支持 C99 標准,它們本身的性能也十分強大。而像 ARM 出的 RVDS 編譯器甚至可用 GNU 語法擴展。


  • 下圖展示了上述C語言編譯器的分類。


㈢ 目前主流的C語言編譯軟體是什麼

C語言相比其他很多新興的、復雜的語言,語法還是簡單一些,較好實現的。

所以在C語言幾十年的發展中出現了各式各樣的編譯器,還有一些容易被誤解為編譯器的IDE。


這里列舉幾個主流的:

  1. GCC

    毫無疑問,GCC幾乎是unix及linux系統中最通用的編譯器套件,幾乎所有的linux發行版都預裝了GCC作為C語言的默認編譯器。除了對C語言的支持,GCC還支持C++、Objective-C等多種語言。GCC早在1987就由Richard Stallman作為GNU計劃的一部分發布。

  2. Clang

    Clang是近幾年新興的C/C++以及Objective-C的編譯器,Apple是其主要投資者,其最初的開發者已加盟Apple。雖說是新興,但其對C/C++標準的支持不亞於GCC等老牌編譯器,並且外部介面和GCC完全兼容,並且因其模塊化、錯誤提示完善等優點已經越來越受到重視。一些如FreeBSD等項目已將clang作為默認編譯器。

    其實Clang並不是一個完整的編譯器,而是作為同一批開發者開發的另一個備受關注的虛擬機(類似於JVM)的llvm的一個前端開發,只是負責將C語言源碼編譯為llvm IR的中間語言,再由llvm編譯為目標代碼,這樣做可以讓其可移植性更好。

  3. Microsoft Visual C++

    作為擁有可視化集成編程系統的編譯器,VC被很多使用Windows作為開發環境的初學者使用。詳見網路的介紹

    http://ke..com/view/2070966.htm?fromtitle=vc&fromid=7792954&type=syn#viewPageContent


㈣ 編譯原理

編譯原理是計算機專業的一門重要專業課,旨在介紹編譯程序構造的一般原理和基本方法。內容包括語言和文法、詞法分析、語法分析、語法制導翻譯、中間代碼生成、存儲管理、代碼優化和目標代碼生成。 編譯原理是計算機專業設置的一門重要的專業課程。編譯原理課程是計算機相關專業學生的必修課程和高等學校培養計算機專業人才的基礎及核心課程,同時也是計算機專業課程中最難及最挑戰學習能力的課程之一。編譯原理課程內容主要是原理性質,高度抽象[1]。

中文名
編譯原理[1]
外文名
Compilers: Principles, Techniques, and Tools[1]
領域
計算機專業的一門重要專業課[1]
快速
導航
編譯器

編譯原理課程

編譯技術的發展

編譯的基本流程

編譯過程概述
基本概念
編譯原理即是對高級程序語言進行翻譯的一門科學技術, 我們都知道計算機程序由程序語言編寫而成, 在早期計算機程序語言發展較為緩慢, 因為計算機存儲的數據和執行的程序都是由0、1代碼組合而成的, 那麼在早期程序員編寫計算機程序時必須十分了解計算機的底層指令代碼通過將這些微程序指令組合排列從而完成一個特定功能的程序, 這就對程序員的要求非常高了。人們一直在研究如何如何高效的開發計算機程序, 使編程的門檻降低。[2]
編譯器
C語言編譯器是一種現代化的設備, 其需要藉助計算機編譯程序, C語言編譯器的設計是一項專業性比較強的工作, 設計人員需要考慮計算機程序繁瑣的設計流程, 還要考慮計算機用戶的需求。計算機的種類在不斷增加, 所以, 在對C語言編譯器進行設計時, 一定要增加其適用性。C語言具有較強的處理能力, 其屬於結構化語言, 而且在計算機系統維護中應用比較多, C語言具有高效率的優點, 在其不同類型的計算機中應用比較多。[3]
C語言編譯器前端設計
編譯過程一般是在計算機系統中實現的, 是將源代碼轉化為計算機通用語言的過程。編譯器中包含入口點的地址、名稱以及機器代碼。編譯器是計算機程序中應用比較多的工具, 在對編譯器進行前端設計時, 一定要充分考慮影響因素, 還要對詞法、語法、語義進行分析。[3]
1 詞法分析[3]
詞法分析是編譯器前端設計的基礎階段, 在這一階段, 編譯器會根據設定的語法規則, 對源程序進行標記, 在標記的過程中, 每一處記號都代表著一類單詞, 在做記號的過程中, 主要有標識符、關鍵字、特殊符號等類型, 編譯器中包含詞法分析器、輸入源程序、輸出識別記號符, 利用這些功能可以將字型大小轉化為熟悉的單詞。[3]
2 語法分析[3]
語法分析是指利用設定的語法規則, 對記號中的結構進行標識, 這包括句子、短語等方式, 在標識的過程中, 可以形成特殊的結構語法樹。語法分析對編譯器功能的發揮有著重要影響, 在設計的過程中, 一定要保證標識的准確性。[3]
3 語義分析[3]
語義分析也需要藉助語法規則, 在對語法單元的靜態語義進行檢查時, 要保證語法規則設定的准確性。在對詞法或者語法進行轉化時, 一定要保證語法結構設置的合法性。在對語法、詞法進行檢查時, 語法結構設定不合理, 則會出現編譯錯誤的問題。前端設計對精確性要求比較好, 設計人員能夠要做好校對工作, 這會影響到編譯的准確性, 如果前端設計存在失誤, 則會影響C語言編譯的效果。[3]

㈤ 微軟的C語言和其他C語言有什麼區別嗎

不知道樓主說的是所謂「微軟的c」是指什麼概念……
(個人意見,僅供參考)
1.如果是指微軟推出的c語言的編譯器ms c的話,其實就是c語言各個編譯器之間的區別。如果你想深入了解,最好是學習下c標準的制定歷史。e.gc98、c99。微軟推出的ms c是一款嵌入式系統編譯器。
C語言命令要被硬體識別並執行,必須通過編譯器編譯。編譯器分為前端、中端、後端。前端與各種計算機語言寫的程序打交道,後端與處理器的基本指令集接軌。所以如果使用C編程時,要達到最高的效率,最好能夠很了解所使用的C編譯器。先試驗一下每條C語言編譯以後對應的匯編語言的語句行數,這樣就可以很明確的知道效率。在今後編程的時候,使用編譯效率最高的語句,這樣就能確保單片機C編程的時候同樣的功能不同的C程序,編譯效率最高。但是各家的C編譯器都會有一定的差異,優秀的嵌入式系統C編譯器代碼長度和執行時間僅比以匯編語言編寫的同樣功能程度長5-20%,所以不同廠家的C編譯器的編譯效率也會有所不同。
至於用不同的編譯器編寫的程序能否在LUNIX下運行的問題其實就是語言的移植問題。如果兩個不同版本的C語言編譯器是完全兼容的,那麼用其中任何一個版本的C語言寫的源程序,都可以在另一個版本的C編譯器上不加修改的成功編譯。
下面列出常用的c編譯器及其所支持的平台。
①MinGW (gcc for Windows)
開源、GNU/gcc 編譯器的 Windows 版、32 位、編譯代碼優化、GCC 支持平台最多、支持 C99/C++98 標准 。
②Open Watcom C/C++
開源、16/32 位、編譯代碼優化
Digital Mars C/C++ compiler
16/32 位,編譯、連接速度快、代碼優化、只部分支持 C99 標准
③Borland C/C++ 5.5
只部分支持 C99 標准
④Ms Visual C++ Toolkit 2003
C/C++ 運行時庫(C/C++ Run-Time Library)、連接器(Linker)、Micro$oft .NET 運行時庫、和程序例子。但不包括 IDE。只部分支持 C99 標准。
⑤lcc
開源、32 位、支持 C99 標准、純 C (不支持 C++) 編譯器
…………………
由於c語言的可移植性相對於其他的語言是很強的。所以,ms c編譯的程序一般情況下LUNIX是可以運行的。不過也有很多的具體細節問題另當別論。
2.如果你這里「微軟的c語言」指的是微軟推出的C sharp(c#)的話。當然就不能在LUNIX下運行了。
C#是一種最新的、面向對象的編程語言。C#與C/C++具有極大的相似性,熟悉類似語言的開發者可以很快的轉向C#。 但其中的很多標准與c是不一樣的。

㈥ 學c語言用什麼軟體

目前,市面上學習c語言用的軟體有TurboC、win-tc、GCC、DevC++、VC++6.0、Code::Blocks、C-Free等等,這些軟體之中,有的是集成開發環境,有的是編譯器,是學習c語言人員需要了解和掌握的。
TurboC
TurboC是最為經典的編譯器,對於新手來說,是比較容易上手且簡單易學,系統體積也比較小,運行比較快,是學習C語言的首選軟體。
VC++6.0
VC++6.0是學習C語言較為主流的編譯器,因為編程界面是可視化,並且類和MFC非常強大,在編譯過程中,如果出現錯誤,還會提示報錯,幫助及時改正。
GCC
GCC屬於GNU編譯器的套件,是一款專用編譯器,其中涉及libgcj語言庫、C、C++、Java等語言的前端,可操作性強。
當然,對比軟體來說,小編覺得想要掌握C語言,是需要有一個系統學習的過程的。C語言並不好學,而且晦澀難懂,如果沒有專業老師,是很難繼續下去的。因而,我們想要學習C語言的話,可以選擇一家正規的培訓機構,跟著專業老師學就好。

㈦ Dev-C++的歷史發展

C++是從C語言中發展而來的。C語言是1972年由美國貝爾實驗室(AT&TBell)的D.M.Ritchie研製成功的。它不是為了初學者設計的,而是為計算機專業人員設計的。最初它是作為寫UNIX操作系統的一種工具,在貝爾實驗室內部使用。後來C語言不斷改進,人們發現它功能豐富、表達能力強、使用靈活方便、應用面廣、目標程序效率高、可移植性好,既具有高級語言的優點,又具有低級語言的許多優點,特別適合於寫系統軟體,因此C語言從實驗室走向美國,從美國走向世界。到20世紀70年代,它已風靡全世界。無論是在中國還是在外國,C語言都成為了計算機開發人員的基本功。
但是隨著軟體規模的增大,用C語言編寫程序漸漸顯得有些吃力了。C語言是結構化和模塊化的語言,它是面向過程的。在處理較小規模的程序時,程序員用C語言還是比較得心應手。但是當問題比較復雜、程序的規模比較大時,結構化程序的設計方法就顯出它的不足。
為了解決軟體設計的危機,在20世紀80年代,人們提出了面向對象的程序設計(object oriented programming,OOP),需要設計出能支持面向對象的程序設計方法的新的語言。在實踐中,人們發現由於C語言是如此的深入人心,使用如此廣泛,面對程序設計方法的革命,最好的辦法不是另外發明一種語言去代替它,而是在它原有的基礎上加以發展。在這種形式下,C++應運而生。C++是由貝爾實驗室(AT&TBell)的Bjarne Stroustrup博士及其同事於20世紀80年代初在C語言的基礎上開發成功的。
AT&TBell發布的第一個Dev-C++編譯系統實際上是一個預編譯器(前端編譯器),真正的Dev-C++程序是在1988年誕生的。
C++中提供豐富的STL模板庫,不僅適合演算法競賽,同樣適合軟體開發。

㈧ C語言文件的編譯與執行的四個階段並分別描述

開發C程序有四個步驟:編輯、編譯、連接和運行。

任何一個體系結構處理器上都可以使用C語言程序,只要該體系結構處理器有相應的C語言編譯器和庫,那麼C源代碼就可以編譯並連接到目標二進制文件上運行。

1、預處理:導入源程序並保存(C文件)。

2、編譯:將源程序轉換為目標文件(Obj文件)。

3、鏈接:將目標文件生成為可執行文件(EXE文件)。

4、運行:執行,獲取運行結果的EXE文件。

(8)c語言的編譯器和前端編譯器擴展閱讀:

將C語言代碼分為程序的幾個階段:

1、首先,源代碼文件測試。以及相關的頭文件,比如stdio。H、由預處理器CPP預處理為.I文件。預編譯的。文件不包含任何宏定義,因為所有宏都已展開,並且包含的文件已插入。我歸檔。

2、編譯過程是對預處理文件進行詞法分析、語法分析、語義分析和優化,生成相應的匯編代碼文件。這個過程往往是整個程序的核心部分,也是最復雜的部分之一。

3、匯編程序不直接輸出可執行文件,而是輸出目標文件。匯編程序可以調用LD來生成可以運行的可執行程序。也就是說,您需要鏈接大量的文件才能獲得「a.out」,即最終的可執行文件。

4、在鏈接過程中,需要重新調整其他目標文件中定義的函數調用指令,而其他目標文件中定義的變數也存在同樣的問題。

㈨ 學C語言現在最好用的編程軟體

GNU編譯器套裝
開發 The GNU Project
最新版本 4.4.2 / 2009-10-15(2個月前)
操作系統 跨平台
類型 編譯器
許可協議 GPL
網站 gcc.gnu.org

GCC(GNU Compiler Collection,GNU編譯器套裝),是一套由GNU開發的編程語言編譯器。它是一套以GPL及LGPL許可證所發行的自由軟體,也是GNU計劃的關鍵部分,亦是自由的類Unix及蘋果計算機Mac OS X 操作系統的標准編譯器。GCC(特別是其中的C語言編譯器)也常被認為是跨平台編譯器的事實標准。

GCC原名為GNU C語言編譯器(GNU C Compiler),因為它原本只能處理C語言。GCC很快地擴展,變得可處理C++。之後也變得可處理Fortran、Pascal、Objective-C、Java,以及Ada與其他語言。
目錄
[隱藏]

* 1 概觀
* 2 目前支持的語言
o 2.1 內嵌OpenMP支持
* 3 支持的處理器架構
* 4 結構
o 4.1 前端介面
o 4.2 中介介面
o 4.3 後端介面
* 5 替GCC程序除錯
* 6 參考書目及注釋
* 7 參閱
* 8 更多閱讀
* 9 外部鏈接

[編輯] 概觀

GCC是由理查德·馬修·斯托曼在1985年開始的。他首先擴增一個舊有的編譯器,使它能編譯C,這個編譯器一開始是以Pastel語言所寫的。Pastel是一個不可移植的Pascal語言特殊版,這個編譯器也只能編譯Pastel語言。為了讓自由軟體有一個編譯器,後來此編譯器由斯托曼和Len Tower在1987年[1]以C語言重寫[2]並成為GNU項目的編譯器。GCC的建立者由自由軟體基金會直接管理[3]。

在1997年,一群不滿GCC緩慢且封閉的創作環境者,組織了一個名為EGCS《Experimental/Enhanced GNU Compiler System》的項目,此項目匯整了數項實驗性的分支進入某個GCC項目的分支中。EGCS比起GCC的建構環境更有活力,且EGCS最終也在1999年四月成為GCC的官方版本。

GCC目前由世界各地不同的數個程序設計師小組維護。它是移植到中央處理器架構以及操作系統最多的編譯器。

由於GCC已成為GNU系統的官方編譯器(包括GNU/Linux家族),它也成為編譯與建立其他操作系統的主要編譯器,包括BSD家族、Mac OS X、NeXTSTEP與BeOS。

GCC通常是跨平台軟體的編譯器首選。有別於一般局限於特定系統與運行環境的編譯器,GCC在所有平台上都使用同一個前端處理程序,產生一樣的中介碼,因此此中介碼在各個其他平台上使用GCC編譯,有很大的機會可得到正確無誤的輸出程序。
[編輯] 目前支持的語言

以2006年5月24日釋出的4.1.1版為准,本編譯器版本可處理下列語言:

* Ada 《GNAT》
* C 《GCC》
* C++(G++)
* Fortran 《Fortran 77: G77,Fortran 90: GFORTRAN》

* Java 《編譯器:GCJ;解釋器:GIJ》
* Objective-C 《GOBJC》
* Objective-C++

先前版本納入的CHILL前端由於缺乏維護而被廢棄。

Fortran前端在4.0版之前是G77,此前端僅支持Fortran 77。在本版本中,G77被廢棄而採用更新的GFortran,因為此前端支持Fortran 95。

下列前端依然存在:

* Mola-2
* Mola-3
* Pascal
* PL/I

* D語言
* Mercury
* VHDL

[編輯] 內嵌OpenMP支持

OpenMP是一種跨語言的對稱多處理器(SMP)多線程並行程序的編程工具,也非常適合當今越來越流行的單CPU多核硬體環境,因此從gcc4.2開始,OpenMP成為其內嵌支持的並行編程規范,可以直接編譯內嵌 OpenMP語句的C/C++/Fortran95的源代碼。gcc4.2之前如果想在C/C++/Fortran中嵌入OpenMP語句的話,需要額外安裝庫和預處理器才能識別和正確處理這些語句。

* gcc 4.2.0開始支持OpenMP v2.5
* gcc 4.4.0開始支持OpenMP v2.5及v3.0

參見GNU的GOMP計劃
[編輯] 支持的處理器架構

GCC目前支持下列處理器架構(以4.1版為准):

* Alpha
* ARM
* Atmel AVR
* Blackfin
* H8/300
* IA-32(x86)與x86-64
* IA-64例如:Itanium

* MorphoSys家族
* Motorola 68000
* Motorola 88000
* MIPS
* PA-RISC
* PDP-11
* PowerPC

* System/370,System/390
* SuperH
* HC12
* SPARC
* VAX
* Renesas R8C/M16C/M32C家族

較不知名的處理器架構也在官方釋出版本中支持:

* A29K
* ARC
* C4x
* CRIS
* D30V
* DSP16xx
* FR-30
* FR-V

* Intel i960
* IP2000
* M32R
* 68HC11
* MCORE
* MMIX

* MN10200
* MN10300
* NS32K
* ROMP
* Stormy16
* V850
* Xtensa

由FSF個別維護的GCC處理器架構:

* D10V
* MicroBlaze

* PDP-10
* MSP430

* Z8000

當GCC需要移植到一個新平台上,通常使用此平台固有的語言來撰寫其初始階段。
[編輯] 結構

GCC的外部介面長得像一個標準的Unix編譯器。用戶在命令行下鍵入gcc之程序名,以及一些命令參數,以便決定每個輸入文件使用的個別語言編譯器,並為輸出代碼使用適合此硬體平台的匯編語言編譯器,並且選擇性地運行連接器以製造可運行的程序。

每個語言編譯器都是獨立程序,此程序可處理輸入的源代碼,並輸出匯編語言碼。全部的語言編譯器都擁有共通的中介架構:一個前端解析符合此語言的源代碼,並產生一抽象語法樹,以及一翻譯此語法樹成為GCC的寄存器轉換語言《RTL》的後端。編譯器優化與靜態代碼解析技術(例如FORTIFY_SOURCE[1],一個試圖發現緩存溢出《buffer overflow》的編譯器)在此階段應用於代碼上。最後,適用於此硬體架構的匯編語言代碼以Jack Davidson與Chris Fraser發明的演算法產出。

幾乎全部的GCC都由C寫成,除了Ada前端大部分以Ada寫成。
[編輯] 前端介面

前端的功能在於產生一個可讓後端處理之語法樹。此語法解析器是手寫之遞回語法解析器。

直到最近,程序的語法樹結構尚無法與欲產出的處理器架構脫鉤。而語法樹的規則有時在不同的語言前端也不一樣,有些前端會提供它們特別的語法樹規則。

在2005年,兩種與語言脫鉤的新型態語法樹納入GCC中。它們稱為GENERIC與GIMPLE。語法解析變成產生與語言相關的暫時語法樹,再將它們轉成GENERIC。之後再使用"gimplifier"技術降低GENERIC的復雜結構,成為一較簡單的靜態唯一形式(Static Single Assignment form,SSA)基礎的GIMPLE形式。此形式是一個與語言和處理器架構脫鉤的全局優化通用語言,適用於大多數的現代編程語言。
[編輯] 中介介面

一般編譯器作者會將語法樹的優化放在前端,但其實此步驟並不看語言的種類而有不同,且不需要用到語法解析器。因此GCC作者們將此步驟歸入通稱為中介階段的部分里。此類的優化包括消解死碼、消解重復計算與全局數值重編碼等。許多優化技巧也正在實現中。
[編輯] 後端介面

GCC後端的行為因不同的前處理器宏和特定架構的功能而不同,例如不同的字元尺寸、調用方式與大小尾序等。後端介面的前半部利用這些消息決定其RTL的生成形式,因此雖然GCC的RTL理論上不受處理器影響,但在此階段其抽象指令已被轉換成目標架構的格式。

GCC的優化技巧依其釋出版本而有很大不同,但都包含了標準的優化演算法,例如循環優化、線程跳躍、共通程序子句消減、指令調度等等。而RTL的優化由於可用的情形較少,且缺乏較高級的信息,因此比較起近來增加的GIMPLE語法樹形式[2],便顯得比較不重要。

後端經由一重讀取步驟後,利用描述目標處理器的指令集時所取得的信息,將抽象寄存器替換成處理器的真實寄存器。此階段非常復雜,因為它必須關照所有GCC可移植平台的處理器指令集的規格與技術細節。

後端的最後步驟相當公式化,僅僅將前一階段得到的匯編語言碼藉由簡單的副函數轉換其寄存器與存儲器位置成相對應的機器碼。
[編輯] 替GCC程序除錯

為GCC除錯的首選工具當然是GNU除錯器。其他特殊用途的除錯工具是Valgrind,用以發現存儲器泄漏 (Memory leak)。而GNU測量器(gprof)可以得知程序中某些函數花費多少時間,以及其調用頻率;此功能需要用戶在編譯時選定測量《profiling》選項。
[編輯] 參考書目及注釋

* Richard M. Stallman:Using and Porting the GNU Compiler Collection, Free Software Foundation,ISBN 0-595-10035-X
* Richard M. Stallman: Using Gcc: The Gnu Compiler Collection Reference, Free Software Foundation, ISBN 1-882114-39-6
* Brian J. Gough:An Introction to GCC, Network Theory Ltd., ISBN 0-9541617-9-3

1. ^ Tower, Leonard (1987) "GNU C編譯器beta測試版釋出" comp.lang.misc USENET新聞組;參閱http://gcc.gnu.org/releases.html#timeline
2. ^ Stallman, Richard M.(1986年2月1日).GNU狀態.GNU的公告版,1(1).自由軟體基金會.
3. ^ Stallman, Richard M. (2001) "GCC貢獻者名單"於使用及移植GCC 2.95版(Cambridge, Mass.: Free Software Foundation)

[編輯] 參閱
[[File:|36x32px|自由軟體主題]] 自由軟體主題首頁

GCC目前包含了Boehm GC,一個為C/C++ 所設計的垃圾回收器。

* distcc - 為分布式編譯所設計的軟體,以GCC為協同軟體。
* LLVM - 低層虛擬機編譯器架構。
* MinGW - 將GNU開發工具移植到Win32平台下的計劃
* Cygwin - 在Windows上運行GNU程序的模擬軟體。
* GCC Summit
* OpenWatcom - 另一個開放原碼的C++/Fortran編譯器。
* Code Sourcery - 一個GCC顧問公司。
* ggcc - 全球化GCC項目。

[編輯] 更多閱讀

* Arthur Griffith, GCC: The Complete Reference. McGrawHill/Osborne. ISBN 0-07-222405-3.
* Kerner, Sean Michael.Open Source GCC 4.0: Older, Faster,internetnews.com,2005年4月22日.
* Kerner, Sean Michael.New GCC Heavy on Optimization,internetnews.com,2006年3月2日.

[編輯] 外部鏈接

* GCC官方網站
* GCC Forum - 由Nabble維持,整理所有gcc通信討論串,並集成入一個可搜索介面中。

㈩ 前端需要編譯器嗎vscode這個不是編譯器嗎

編譯器就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。一個現代編譯器的主要工作流程:源代碼 (source code) → 預處理器 (preprocessor) → 編譯器 (compiler) → 目標代碼 (object code) → 鏈接器 (Linker) → 可執行程序 (executables)

從這個意義上來說,前端是沒有編譯器的,但是會有開發環境(IDE)一說,前端雖然是純文本,可以用普通的記事本或者editplus之類來的編輯,但會缺少象語法補全、代碼格式化、腳本調試、語法高亮這些功能,所以才會需要有這些功能的IDE存在,vscode不是編譯器,它只是一個代碼編輯器,僅就前端來說,如果不用vscode,也可以用象hbuilderX這類軟體。