|
本篇段倆部分3.1 Linux下編寫第一個(gè) C C 程序,3.2gcc 編譯器 我們?cè)?Windows 下使用 C 語(yǔ)言開發(fā)的時(shí)候,一般都會(huì)有支持 Windows 的開發(fā)工具,比如我們學(xué)習(xí) 51 單片機(jī)或者 STM32,所使用的的 Keil 開發(fā)軟件。此類開發(fā)工具一般都會(huì)集編輯、編譯于一體,我們只需要編輯好代碼,電機(jī)開發(fā)工具的編譯按鈕,就可以自動(dòng)為我們編譯出可執(zhí)行的二進(jìn)制文件了。Ubuntu 下的 C 語(yǔ)言開發(fā)與 Windows 下的 C 語(yǔ)言開發(fā)不一樣的,并沒有圖形界面的開發(fā)工具,而且編輯和編譯是分開的。我們需要使用文本編輯軟件先編寫代碼,然后使用編譯工具(GCC)來(lái)編譯,最終生成可執(zhí)行的二進(jìn)制文件。如果我們的工程中有多個(gè)源文件,在編譯的時(shí)候我們通常會(huì)通過(guò) Makefile 文件來(lái)管理整個(gè)工程的源文件。本章我們來(lái)學(xué)習(xí)如何在 Ubuntu 下進(jìn)行 C 語(yǔ)言成的編輯,GCC 編譯,Makefile 文件的使用。通過(guò)本章學(xué)習(xí)我們可以掌握 Linux 下的 C 語(yǔ)言開發(fā)基本方法,為后面的學(xué)習(xí)做好準(zhǔn)備。 3.1 Linux 下編寫第一個(gè) C C 程序 程序 本章節(jié)開始的部分我們介紹了 Ubuntu 下 C 程序開發(fā)分成兩部分:編輯和編譯。Ubuntu 下有很多種文本編輯的工具,如 vim、Gedit、Emacs,這里我們使用前面章節(jié)介紹的 vim 文本編輯工具來(lái)編輯 C 程序。相信大家在學(xué)習(xí) C 語(yǔ)言的時(shí)候都是從“Hello World”這個(gè)程序開始的吧,下面我們通過(guò)這個(gè)程序,來(lái)學(xué)習(xí)下 Linux下 C 程序開發(fā)的流程。 3.1.1 代碼編寫 首先我們?cè)谟脩舾夸浵陆⑽募䦅A“work”,用于保存所有 C 語(yǔ)言的程序,運(yùn)行結(jié)果如下圖所示:
然后進(jìn)入創(chuàng)建的文件夾 work,為了方便管理,我們每個(gè)例程都創(chuàng)建單獨(dú)的文件夾,首先我們創(chuàng)建文件夾“hello_world”來(lái)保存我們的第一個(gè) C 程序,如下圖所示:
然后進(jìn)入上圖中的 hello_world 文件夾,使用 vi 命令新建文件“main.c”,然后在里面輸入下面的代碼: #include int mian(int argc, char *argv[]) { printf("Hello World!\n"); return 0; } 編寫完以后保存并退出 vim 編輯器,然后可以使用 cat 命令查看代碼是否保存成功,如下圖所示:
通過(guò)上圖可以看到代碼已經(jīng)編輯完成了。 3.1.2 代碼編譯 Ubuntu 下使用 gcc 編譯器來(lái)編譯 C 程序,我們?cè)诎惭b Ubuntu 系統(tǒng)的時(shí)候,gcc 編譯器 morning 安裝好了,我們可以在終端輸入“gcc -v”來(lái)查看下 gcc 的版本,如下圖所示:
通過(guò)上圖可以看到 gcc 的版本信息,說(shuō)明我們的 Ubuntu 上已經(jīng)安裝了 gcc 編譯器了,下面我們來(lái)看看怎么通過(guò) gcc 編譯我們的第一個(gè) C 程序,我們?cè)诮K端輸入“gcc main.c -o main”,然后回車,會(huì)生成 main 文件,如下圖所示:
在上面的“gcc main.c -o main”這個(gè)命令里面“-o“用來(lái)指定編譯生成的文件名字,我們指定的是 main,所以在圖 3.1.2.2 中可以看到生成了文件“main”,如果我們想生成其它的文件名字,我們只需要修改“-o”后面的 main(修改成您希望生成的文件名字)。經(jīng)過(guò)前面的步驟已經(jīng)生成了可執(zhí)行文件 main,現(xiàn)在我們演示下在終端如何運(yùn)行一個(gè)可行性的程序,我們直接在終端當(dāng)前目錄下(可執(zhí)行文件所在的目錄下)輸入“./main”,然后回車,就可以運(yùn)行可執(zhí)行文件 main 了,運(yùn)行結(jié)果如下圖所示:
在上圖中運(yùn)行的命令“./main”,其中的“./”代表當(dāng)前目錄下。我們可以看到在終端打印出了 HelloWorld!。至此,Linux 下的 C 語(yǔ)言編輯和編譯的一整套流程我們就介紹完了。 3.2 c gcc 編譯器 編譯器 3.2.1 gcc 命令分析 在 3.1 節(jié)我們已經(jīng)使用 gcc 編譯了 Linux 下的第一個(gè) C 程序,gcc 命令的格式如下: gcc [參數(shù)] [文件名] 主要參數(shù)說(shuō)明如下: -c 編譯、匯編到目標(biāo)代碼(.o),不鏈接成可執(zhí)行文件 -g 生成調(diào)試信息 -o 編譯完成后生成的文件名,如果不使用該選項(xiàng),默認(rèn)生成 a.out 文件 -O 對(duì)程序進(jìn)行優(yōu)化編譯,產(chǎn)生的可執(zhí)行文件執(zhí)行效率高 -w 不生成任何警告 -S 僅編譯到匯編語(yǔ)言,不進(jìn)行匯編和鏈接
3.2.2 編譯警告錯(cuò)誤處理 我們是 Windows 下使用 Keil 或者其他開發(fā)工具,在編譯的時(shí)候,如果程序有錯(cuò)誤,開發(fā)工具會(huì)提示出具體的錯(cuò)誤信息,可以很方便的定位到問(wèn)題點(diǎn),快速的修改出現(xiàn)的問(wèn)題,gcc 同樣也有類似的功能,下面我們來(lái)看下 gcc 的錯(cuò)誤提示功能,首先我們?cè)?work 目錄下建立文件夾“test2”,然后使用 vim 在 test2 文件夾創(chuàng)建 main.c 文件夾,在 main.c 文件輸入如下代碼: #include int main(int argc, char *argv[]) { int a; a = 1 printf("a=\n", a); return 0; } 上面代碼有兩處錯(cuò)誤: 第 7 行 最后缺少“;” 第 9 行 printf 語(yǔ)法不對(duì),應(yīng)該為:printf("a =%d\n", a); 我們使用 gcc 編譯 main.c,可以看到 gcc 會(huì)提示錯(cuò)誤信息,如下圖所示:
從上圖中可以看到在 mian.c 文件的第 9 行 printf 前面缺少“;”我們?cè)诘?7 行“a = 1”后面加上“;”,然后繼續(xù)編譯,如下圖所示:
從上圖可以看出編譯提示語(yǔ)法格式不對(duì),我們把第 9 行修改成“printf("a=%d\n", a);”,然后在繼續(xù)編譯,如下圖所示:
我們可以看到這次 gcc 編譯通過(guò),最終生成了文件 main。我們?cè)诮K端執(zhí)行 main,運(yùn)行結(jié)果如下圖所示:
從上圖可以看到運(yùn)行的結(jié)果和我們涉及到額結(jié)果一致,通過(guò)本例程可以看到 gcc 編譯器不僅可以檢測(cè)出
程序的錯(cuò)誤,而且還會(huì)標(biāo)記處錯(cuò)誤在哪個(gè)文件的哪一行,很方便的幫助我們?nèi)バ薷膯?wèn)題。
|