gcc 編譯簡單的C程式

2022-09-02 03:36:11 字數 1696 閱讀 1322

節選自

c 語言經典的入門例子是hello world,下面是一示例**:

#include 

int main(

void

)

$ gcc -g -wall hello.c -o hello
該命令將檔案『hello.c』中的**編譯為機器碼並儲存在可執行檔案 『hello』中。機器碼的檔名是通過-o選項指定的。該選項通常作為命令列中的最後乙個引數。如果被省略,輸出檔案預設為 『a.out』。

注意到如果當前目錄中與可執行檔案重名的檔案已經存在,它將被覆蓋。

選項-wall開啟編譯器幾乎所有常用的警告──強烈建議你始終使用該選項。編譯器有很多其他的警告選項,但-wall是最常用的。預設情況下gcc 不會產生任何警告資訊。當編寫 c 或 c++ 程式時編譯器警告非常有助於檢測程式存在的問題。注意如果有用到math.h庫等非gcc預設呼叫的標準庫,請使用-lm引數

本例中,編譯器使用了 -wall 選項而沒產生任何警告,因為示例程式是完全合法的。

選項 ""-g"" 表示在生成的目標檔案中帶除錯資訊,除錯資訊可以在程式異常中止產生core後,幫助分析錯誤產生的源頭,包括產生錯誤的檔名和行號等非常多有用的資訊。

要執行該程式,輸入可執行檔案的路徑如下:

$ ./hello

hello, world!

這將可執行檔案載入記憶體,並使 cpu 開始執行其包含的指令。 路徑./指代當前目錄,因此./hello載入並執行當前目錄下的可執行檔案 『hello』。

如上所述,當用 c 或 c++ 程式設計時,編譯器警告是非常重要的助手。為了說明這一點,下面的例子包含乙個微妙的錯誤:為乙個整數值錯誤地指定了一浮點數控制符『%f』。

#include 

int main (

void

)

一眼看去該錯誤並不明顯,但是它可被編譯器捕捉到,只要啟用了警告選項-wall

編譯上面的程式『bad.c』,將得到如下的訊息:

$ gcc -wall -o bad bad.c

main.c: 在函式『main』中:

main.c:5: 警告: 格式『%f』需要型別『double』,但實參 2 的型別為『int』

這表明檔案 『bad.c』第 6 行中的格式字串用法不正確。gcc 的訊息總是具有下面的格式 檔名:行號:訊息。編譯器對錯誤與警告區別對待,前者將阻止編譯,後者表明可能存在的問題但並不阻止程式編譯。

本例中,對整數值來說,正確的格式控制符應該是%d

如果不啟用-wall,程式表面看起來編譯正常,但是會產生不正確的結果:

$ gcc bad.c -o bad

$ ./bad

two plus two is 0.000000

顯而易見,開發程式時不檢查警告是非常危險的。如果有函式使用不當,將可能導致程式崩潰或產生錯誤的結果。開啟編譯器警告選項-wall可捕捉 c 程式設計時的多數常見錯誤。

gcc編譯C 程式

單個原始檔生成可執行程式 下面是乙個儲存在檔案 helloworld.cpp 中乙個簡單的 c 程式的 helloworld.cpp include int main int argc,char argv 程式使用定義在標頭檔案 iostream 中的 cout,向標準輸出寫入乙個簡單的字串。該 可...

gcc編譯C 程式

單個原始檔生成可執行程式 下面是乙個儲存在檔案 helloworld.cpp 中乙個簡單的 c 程式的 helloworld.cpp include int main int argc,char argv 程式使用定義在標頭檔案 iostream 中的 cout,向標準輸出寫入乙個簡單的字串。該 可...

gcc編譯C 程式

單個原始檔生成可執行程式 下面是乙個儲存在檔案 helloworld.cpp 中乙個簡單的 c 程式的 helloworld.cpp include int main int argc,char ar std cout hello,world std endl return 0 程式使用定義在標頭檔...