如何編譯和執行C++程式?
C 和C語言類似,也要經過編譯和連結後才能執行。在《C語言編譯器》專題中我們講到了 VS、Dev C 、VC 6.0、Code::Blocks、C-Free、GCC、Xcode 等常見 IDE 或編譯器,它們除了可以執行C語言程式,還可以執行 C 程式,步驟是一樣的,這裡不再贅述,讀者需要留意的是 C 原始檔的字尾,以及 GCC 中的g 命令。
下圖是 C/C 程式碼生成可執行檔案的過程:
C 原始檔的字尾
C語言原始檔的字尾非常統一,在不同的編譯器下都是.c。C 原始檔的字尾則有些混亂,不同的編譯器支援不同的字尾,下表是一個簡單的彙總:
編譯器Microsoft Visual C GCC(GNU C )Borland C UNIX字尾cpp、cxx、cccpp、cxx、cc、c 、CcppC、cc、cxx
UNIX 是昂貴的商業作業系統,初學者幾乎用不到;Microsoft Visual C 是微軟的 C/C 編譯器,VC 6.0、VS 都使用該編譯器。我推薦使用.cpp作為 C 原始檔的字尾,這樣更加通用和規範。
g 命令
有了C語言開發經驗,在 VS、Dev C 、VC6.0、C-Free、Xcode 等常見 IDE 下編譯 C 程式易如反掌,只要把原始檔的字尾設定為.cpp即可,相信各位讀者都能夠毫無障礙地駕馭。本節我們重點介紹 Linux GCC 的使用。
在C語言中,我們使用gcc命令來編譯和連結C程式。例如編譯單個原始檔:
gcc main.c
編譯多個原始檔:
gcc main.c module.c
編譯C 程式時,gcc命令也可以使用,不過要增加-lstdc 選項,否則會發生連結錯誤。例如編譯單個原始檔:
gcc main.cpp -lstdc
編譯多個原始檔:
gcc main.cpp module.cpp -lstdc
gcc命令在連結時預設使用C的庫,只有新增了-lstdc 選項才會使用 C 的庫。
GCC 中還有一個g 命令,它專門用來編譯 C 程式,廣大 C 開發人員也都使用這個命令。g 命令和gcc命令的用法如出一轍,例如編譯單個原始檔:
g main.cpp
編譯多個原始檔:
g main.cpp module.cpp
使用-o選項可以指定可執行檔案的名稱:
g main.cpp -o demo
./demo
要想理解g 命令,我們得從 GCC 的歷史談起。GCC 是由 GUN 組織開發的,最初只支援C語言,是一個單純的C語言編譯器,後來 GNU 組織傾注了更多的精力,使得 GCC 越發強大,增加了對 C 、Objective-C、Fortran、Java 等其他語言的支援,此時的 GCC 就成了一個編譯器套件(套裝),是所有編譯器的總稱。
在這個過程中,gcc命令也做了相應地調整,它不再僅僅支援C語言,而是預設支援C語言,增加引數後也可以支援其他的語言。也就是說,gcc是一個通用命令,它會根據不同的引數呼叫不同的編譯器或連結器。
但是讓使用者指定引數是一種不明智的行為,不但增加了學習成本,還使得操作更加複雜,所以後來 GCC 又針對不同的語言推出了不同的命令,例如g 命令用來編譯 C ,gcj命令用來編譯 Java,gccgo命令用來編譯Go語言。
在以後使用 Linux GCC 時,我推薦使用g 命令來編譯 C 程式,這樣更加簡潔和規範。
關注小編公眾號;程式設計師大咖,還有更多為大家分享的精彩內容哦~~~