C 語言編譯器簡介


C 語言編譯器的作用是將 C 程序的源碼翻譯成特定計算機硬件上可執行的二進制文件。

在默認 C 程序的編譯與運行發生在同一環境的前提下,根據可執行文件運行的環境可以將 C 語言編譯器分為桌面操作系統和嵌入式操作系統兩大類。

桌面操作系統上的 C 語言編譯器

桌面操作系統上常用的 C 語言編譯器有:

  1. Visual C++
  2. GCC
  3. Clang

當前主流的三類桌面操作系統及其上常用的編譯器為:

  1. Windows: Visual C++ / GCC / Clang
  2. Unix/Linux: GCC / Clang
  3. OS X/iOS: Clang

Visual C++ (簡稱 MSVC ) 是微軟開發的 C 編譯器,只能用於 Windows 系統。
MSVC 是非開源軟件,個人用戶可以通過社區版 Visual Studio 免費使用該編譯器。
但是未經微軟授權, MSVC 不能應用到商業化產品。

GCC(GNU Compiler Collection/GNU 編譯器套件) 是由 GNU 開發的編譯器。
GNU 編譯器套件包括 C、C++、 Objective-C、 Fortran、Java、Ada 和 Go 語言前端, 也包括了這些語言的庫。
GCC 的初衷是為 GNU 操作系統專門編寫的一款編譯器。

Clang 編譯器是 LLVM 項目的一部分,由於該項目是在 Apple 主推下發展的,所以在 OS X 系統中,Clang 編譯器又被稱為 Apple LLVM 編譯器。

GCC 和 Clang 可用於 Windows 系統,但主要用於 Unix/Linux 系統。
GCC 與 Clang 編譯器編譯出的可執行程序一般沒有任何限制,應用程序可以隨意發布和商用。

嵌入式系統上的 C 語言編譯器

不同型號的嵌入式設備常常需要對應的配套編譯器,常見的有:

  1. Keil C51: Keil公司的 51 系列單片機
  2. AVR GCC: Arduino 開發板
  3. ADS、RVDS、DS-5 Studio: ARM 架構設備
  4. CCS: TI 公司的 DSP 設備
  5. Visual DSP++: ADI 公司的 DSP 設備

Windows 系統安裝 GCC 的方法

GCC 的初衷是為 GNU 操作系統專門編寫一款編譯器, 現已被大多數類 Unix 操作系統(如 Linux、BSD 等)采納為標准的編譯器。
在 Windows 系統上使用 GCC 編譯器需要借助 MinGW(Minimalist GCC for Windows) 提供一組包含文件和端口庫,好讓控制台模式的程序能夠使用微軟的標准C運行時庫(C Runtime/MSVCRT.DLL)。

MinGW Download 可以下載 MinGW-get 程序。
MinGW-get 是 MinGW 的一個包管理程序, 用來管理各類包含文件與端口庫。
安裝好需要的包后即可在 Windows 終端上調用 GCC 來編譯指定源碼。

GCC 的基本使用方法

GCC 的詳細用法可以參考 GCC Manual 。此處簡單介紹 GCC 的基本用法。

GCC 編譯的基本語法為:
gcc [options] [filenames]
其中[options]是輸入參數,[filenames]是各輸入/輸出文件名。

GCC 編譯的常用參數包含:

  • [-c]只編譯, 不鏈接成可執行文件; 輸入源代碼*.c文件, 輸出*.o目標文件; 常用於編譯不含主程序的子程序文件。

  • [-o OUTPUT_FILENAME]GCC 默認輸出的可執行文件名為a.out; 此參數可將輸出文件名設置為OUTPUT_FILENAME,GCC 要求設置文件名不能和源文件同名。

  • [-g]產生符號調試工具 (GDB) 所必要的符號資訊,要想對源代碼進行調試,我們就必須加入這個選項。

  • [-O]編譯過程中對程序進行優化; 在編譯、鏈接采用這個選項,源代碼會在編譯、鏈接過程中被編譯器優化處理,以產生執行效率更高的可執行程序; 但編譯、鏈接的速度會相應降低。

  • [-O2]編譯器會執行比-O更深度的優化, 同時編譯速度也更慢。

  • [-I DIRNAME]DIRNAME指示的目錄加入到程序頭文件目錄列表中;用於預編譯過程。

  • [-v]打印出 GCC 相關程序的版本號以及編譯器執行時的詳細過程信息; 此參數可用於查看 GCC 搜索頭文件及庫文件時使用的搜索路徑。

(注)
C 程序有兩種預編譯指令可用於包含頭文件
#include <stdio.h>
#include "stdio.h"
使用尖括號包含頭文件時, 編譯器在預編譯時會在系統路徑包含的目錄中搜索該文件; 使用雙引號包含頭文件時,編譯器會在源碼文件所在的文件夾中搜索該文件。

GCC 相關文件

  • *.h程序所包含的頭文件;
  • *.cC 源代碼文件;
  • *.iC 源代碼文件且不應進行預處理;
  • *.o編譯后的目標文件(Object File);
  • *.a目標文件構成的檔案庫文件;
  • *.out鏈接后輸出的可執行文件;
  • *.C / *.cc / *.cxxC++ 源代碼文件且必須要經過預處理;
  • *.iiC++ 源代碼文件且不應進行預處理;
  • *.mObjective-C 源代碼文件;
  • *.mmObjective-C++ 源代碼文件;
  • *.s匯編語言源代碼文件;
  • *.S經過預編譯的匯編語言源代碼文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM