節選自
c 語言經典的入門例子是hello world,下面是一示例**:
#includeint 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這將可執行檔案載入記憶體,並使 cpu 開始執行其包含的指令。 路徑./指代當前目錄,因此./hello載入並執行當前目錄下的可執行檔案 『hello』。hello, world!
如上所述,當用 c 或 c++ 程式設計時,編譯器警告是非常重要的助手。為了說明這一點,下面的例子包含乙個微妙的錯誤:為乙個整數值錯誤地指定了一浮點數控制符『%f』。
#includeint main (
void
)
一眼看去該錯誤並不明顯,但是它可被編譯器捕捉到,只要啟用了警告選項-wall。
編譯上面的程式『bad.c』,將得到如下的訊息:
$ gcc -wall -o bad bad.cmain.c: 在函式『main』中:
main.c:5: 警告: 格式『%f』需要型別『double』,但實參 2 的型別為『int』
這表明檔案 『bad.c』第 6 行中的格式字串用法不正確。gcc 的訊息總是具有下面的格式 檔名:行號:訊息。編譯器對錯誤與警告區別對待,前者將阻止編譯,後者表明可能存在的問題但並不阻止程式編譯。
本例中,對整數值來說,正確的格式控制符應該是%d。
如果不啟用-wall,程式表面看起來編譯正常,但是會產生不正確的結果:
$ gcc bad.c -o bad顯而易見,開發程式時不檢查警告是非常危險的。如果有函式使用不當,將可能導致程式崩潰或產生錯誤的結果。開啟編譯器警告選項-wall可捕捉 c 程式設計時的多數常見錯誤。$ ./bad
two plus two is 0.000000
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 程式使用定義在標頭檔...