




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 1. 項(xiàng)目課題引入 2. Vi編輯器的使用方法 3. Linux中C語(yǔ)言程序的編輯 4. Linux中C語(yǔ)言程序的運(yùn)行 5. 現(xiàn)場(chǎng)演示案例 課題引入項(xiàng)目背景 在Linux操作系統(tǒng)中設(shè)計(jì)一個(gè)C語(yǔ)言程序,當(dāng)程序運(yùn)行時(shí)顯示如下的運(yùn)行效果 : 課題引入項(xiàng)目分析 完成本項(xiàng)目需要解決的問(wèn)題: 1、在Linux下我們使用什么工具進(jìn)行程序和文字的編輯。 2、在Linux操作系統(tǒng)中我們?nèi)绾尉幾g和運(yùn)行C程序 3、我們編寫(xiě)的程序如何在Linux操作系統(tǒng)中進(jìn)行調(diào)試。 課題引入教學(xué)目標(biāo) 學(xué)習(xí)本課需要實(shí)現(xiàn)的教學(xué)目標(biāo): ?掌握Vi編輯器的啟動(dòng)和退出 ?掌握Vi編輯器的工作模式 ?熟悉Vi編輯器的基本命令 ?掌握C/C+編
2、譯器gcc的使用 ?掌握Linux下程序設(shè)計(jì)的一般方法 課題引入應(yīng)達(dá)到的職業(yè)能力 學(xué)生學(xué)習(xí)本課后應(yīng)該具有的職業(yè)能力: ?熟練掌握Vi編輯器的使用方法 ?能夠利用Vi編輯器進(jìn)行文字編輯工作 ?能夠使用gcc進(jìn)行C/C+程序的編譯和調(diào)試 ?能夠獨(dú)立完成基本的Linux程序 項(xiàng)目問(wèn)題一Vi編輯器的使用 Vi編輯器包含的主要內(nèi)容有: ?Vi編輯器的啟動(dòng)與退出 ?Vi編輯器的工作模式 ?Vi編輯器的常用命令 Vi編輯器的簡(jiǎn)介 ?Vi是Visual interface 的簡(jiǎn)稱(chēng),它可以執(zhí)行輸出、刪除、查找、替換、塊操作等眾多文本操作 ?用戶(hù)可以根據(jù)自己的需要對(duì) Vi進(jìn)行定制,這是其他編輯程序所沒(méi)有的。 ?V
3、i不是一個(gè)排版程序,它不像 WORD或WPS那樣可以對(duì)字體、格式、段落等其他屬性進(jìn)行編排,它只是一個(gè)文本編輯程序。 ?Vi是全屏幕文本編輯器,它沒(méi)有菜單,只有命令。 Vi的啟動(dòng) ?在系統(tǒng)提示符后輸入 Vi和想要編輯(或建立)的文件名,便可進(jìn)入Vi ?如果只輸入Vi,而不帶文件名,也可以進(jìn)入 Vi Vi編輯器的退出 ?要退出Vi,在命令模式下鍵入如圖所示命令。 ?其中:wq和:x是存盤(pán)退出,而:q是直接退出。可以用:w命令保存文件后再用:q 退出,或用:wq或:x命令退出。 ?如果你不想保存改變后的文件,你就需要用 :q!命令,這個(gè)命令將不保存文件而直接退出 Vi Vi的工作模式 ? Vi有3種
4、基本工作模式:編輯模式、插入模式和命令模式。 ? 進(jìn)入Vi之后,首先進(jìn)入的就是編輯模式,進(jìn)入編輯模式后Vi等待編輯命令輸入而不是文本輸入,也就是說(shuō)這時(shí)輸入的字母都將作為編輯命令來(lái)解釋。 ? 在編輯模式下輸入插入命令i、附加命令a、打開(kāi)命令o、修改命令c、替換命令s都可以進(jìn)入插入模式。在插入模式下,用戶(hù)輸入的任何字符都被Vi當(dāng)作文件內(nèi)容保存起來(lái),并將其顯示在屏幕上。在文本輸入過(guò)程中(插入模式下),若想回到命令模式下,按ESC鍵即可。 ? 在編輯模式下,用戶(hù)按“:” 鍵即可進(jìn)入命令模式,此時(shí)Vi會(huì)在顯示窗口的最后一行(通常也是屏幕的最后一行)顯示一個(gè)“:” 作為命令模式的提示符,等待用戶(hù)輸入命令。
5、 Vi編輯器中的常用命令 ?在編輯模式下,輸入如表所示的命令均可進(jìn)入插入模式 文件相關(guān)命令 ?使用下表中的命令可以在 Vi中進(jìn)行文件相關(guān)的操作 字符串搜索、替換和刪除 ?使用下表中的命令可以進(jìn)行字符串的相關(guān)操作 文本的復(fù)制、刪除和移動(dòng) ?使用下表中的命令,可以進(jìn)行文本的相關(guān)操作 在Vi編輯器中執(zhí)行shell命令 ?使用下表中的命令,可以進(jìn)行 shell中的命令 項(xiàng)目問(wèn)題二C程序的編譯 ?Linux應(yīng)用程序表現(xiàn)為2種特殊類(lèi)型的文件:可執(zhí)行文件和腳本文件。可執(zhí)行文件是計(jì)算機(jī)可以直接運(yùn)行的程序,相當(dāng)于Windows的.exe文件。腳本文件是一組指令的集合,相當(dāng)于 Windows的.bat文件。 ?在
6、POSIX兼容的系統(tǒng)中,C語(yǔ)言編譯器被稱(chēng)為c89.Linux盡量實(shí)現(xiàn)相關(guān)標(biāo)準(zhǔn), c89,cc和gcc這些命令全都指向系統(tǒng)的C語(yǔ)言編譯器,通常是 GNU C編譯器,或者稱(chēng)為gcc。 gcc編譯器 ? 在為L(zhǎng)inux開(kāi)發(fā)應(yīng)用程序時(shí),絕大多數(shù)情況下使用的都是C語(yǔ)言,因此幾乎每一位Linux程序員面臨的首要問(wèn)題都是如何靈活運(yùn)用C編譯器。 ? GCC不僅功能非常強(qiáng)大,結(jié)構(gòu)也異常靈活。最值得稱(chēng)道的一點(diǎn)就是它可以通過(guò)不同的前端模塊來(lái)支持各種語(yǔ)言,如Java、 Fortran、Pascal、Modula-3和Ada等。 ? 開(kāi)放、自由和靈活是Linux的魅力所在,而這一點(diǎn)在GCC上的體現(xiàn)就是程序員通過(guò)它能夠更
7、好地控制整個(gè)編譯過(guò)程。在使用GCC編譯程序時(shí),編譯過(guò)程可以被細(xì)分為四個(gè)階段: 預(yù)處理(Pre-Processing) 編譯(Compiling) 匯編(Assembling) 鏈接(Linking) gcc起步HelloWorld ? 在用戶(hù)當(dāng)前目錄,使用Vi編輯器輸入如下代碼,并保存成文件hello.c: #include int main(void) printf (Hello world, Linux programming!n); return 0; ? 然后執(zhí)行下面的命令編譯和運(yùn)行這段程序: 編譯:gcc hello.c -o hello 運(yùn)行:./hello Hello world
8、 結(jié)果:Linux programming! gcc編譯過(guò)程 ?從 程序員的角度看,只需簡(jiǎn)單地執(zhí)行一條 GCC命令就可以了,但從編譯器的角度來(lái)看,卻需要完成一系列非常繁雜的工作。 ?首先,GCC需要調(diào)用預(yù)處理程序 cpp,由它負(fù)責(zé)展開(kāi)在源文件中定義的宏,并向其中插入“ #include”語(yǔ)句所包含的內(nèi)容。 ?接著,GCC會(huì)調(diào)用ccl和as將處理后的源代碼編譯成目 標(biāo)代碼。 ?最后,GCC會(huì)調(diào)用鏈接程序ld,把生成的目標(biāo)代碼鏈接成一個(gè)可執(zhí)行程序。 gcc編譯過(guò)程 ? 第一步是進(jìn)行預(yù)編譯,使用-E參數(shù)可以讓GCC在預(yù)處理結(jié)束后停止編譯過(guò)程: gcc -E hello.c -o hello.i 此時(shí)
9、若查看hello.i文件中的內(nèi)容,會(huì)發(fā)現(xiàn)stdio.h的內(nèi)容確實(shí)都插到文件里去了,而其它應(yīng)當(dāng)被預(yù)處理的宏定義也都做了相應(yīng)的處理。 ? 第二步是將hello.i編譯為目標(biāo)代碼,這可以通過(guò)使用 -c參數(shù)來(lái)完成: gcc -c hello.i -o hello.o GCC默認(rèn)將.i文件看成是預(yù)處理后的C語(yǔ)言源代碼,因此上述命令將自動(dòng)跳過(guò)預(yù)處理步驟而開(kāi)始執(zhí)行編譯過(guò)程,也可以使用-x參數(shù)讓GCC從指定的步驟開(kāi)始編譯。 ? 最后一步是將生成的目標(biāo)文件鏈接成可執(zhí)行文件: ?gcc hello.o -o hello gcc警告提示功能 ?看看如下illcode.c程序,這段代碼寫(xiě)得很糟糕,仔細(xì)檢查一下不難挑出
10、很多毛病: #include void main(void) long long int var = 1; printf(It is not standard C code!n); ?main函數(shù)的返回值被聲明為void,但實(shí)際上應(yīng)該是int ?使用了GNU語(yǔ)法擴(kuò)展,即使用long long來(lái)聲明64位整數(shù),不符合ANSI/ISO C語(yǔ)言標(biāo)準(zhǔn) ?main函數(shù)在終止前沒(méi)有調(diào)用return語(yǔ)句。 gcc警告提示功能 ? 當(dāng)GCC在編譯不符合ANSI/ISO C語(yǔ)言標(biāo)準(zhǔn)的源代碼時(shí),如果加上了-pedantic選項(xiàng),那么使用了擴(kuò)展語(yǔ)法的地方將產(chǎn)生相應(yīng)的警告信息: # gcc -pedantic ill
11、code.c -o illcode illcode.c: In function main: illcode.c:9: ISO C89 does not support long long illcode.c:8: return type of main is not int ? 需要注意的是,-pedantic編譯選項(xiàng)并不能保證被編譯程序與ANSI/ISO C標(biāo)準(zhǔn)的完全兼容,它僅僅只能用來(lái)幫助Linux程序員離這個(gè)目標(biāo)越來(lái)越近。或者換句話(huà)說(shuō), -pedantic選項(xiàng)能夠幫助程序員發(fā)現(xiàn)一些不符合 ANSI/ISO C標(biāo)準(zhǔn)的代碼,但不是全部,事實(shí)上只有ANSI/ISO C語(yǔ)言標(biāo)準(zhǔn)中要求進(jìn)行編譯器
12、診斷的那些情況,才有可能被GCC發(fā)現(xiàn)并提出警告。 ? 除了-pedantic之外,GCC還有一些其它編譯選項(xiàng)也能夠產(chǎn)生有用的警告信息。這些選項(xiàng)大多以-W開(kāi)頭,其中最有價(jià)值的當(dāng)數(shù)-Wall了,使用它能夠使GCC產(chǎn)生盡可能多的警告信息: # gcc -Wall illcode.c -o illcode illcode.c:8: warning: return type of main is not int illcode.c: In function main: illcode.c:9: warning: unused variable var ? GCC給出的警告信息雖然從嚴(yán)格意義上說(shuō)不能算作是
13、錯(cuò)誤,但卻很可能成為錯(cuò)誤的棲身之所。一個(gè)優(yōu)秀的Linux 程序員應(yīng)該盡量避免產(chǎn)生警告信息,使自己的代碼始終保持簡(jiǎn)潔、優(yōu)美和健壯的特性。 gcc警告提示功能 ? 在處理警告方面,另一個(gè)常用的編譯選項(xiàng)是-Werror,它要求GCC將所有的警告當(dāng)成錯(cuò)誤進(jìn)行處理,這在使用自動(dòng)編譯工具(如Make等)時(shí)非常 有用。如果編譯時(shí)帶上-Werror選項(xiàng),那么GCC會(huì)在所有產(chǎn)生警告的地方停止編譯,迫使程序員對(duì)自己的代碼進(jìn)行修改。只有當(dāng)相應(yīng)的警告信息消除時(shí),才 可能將編譯過(guò)程繼續(xù)朝前推進(jìn)。執(zhí)行情況如下: gcc -Wall -Werror illcode.c -o illcode cc1: warnings be
14、ing treated as errors illcode.c:8: warning: return type of main is not int illcode.c: In function main: illcode.c:9: warning: unused variable var ? 對(duì)Linux程序員來(lái)講,GCC給出的警告信息是很有價(jià)值的,它們不僅可以幫助程序員寫(xiě)出更加健壯的程序,而且還是跟蹤和調(diào)試程序的有力工具。建議在用GCC編譯源代碼時(shí)始終帶上-Wall選項(xiàng),并把它逐漸培養(yǎng)成為一種習(xí)慣,這對(duì)找出常見(jiàn)的隱式編程錯(cuò)誤很有幫助。 項(xiàng)目問(wèn)題三C程序的調(diào)試運(yùn)行 ?我們編寫(xiě)的程序經(jīng)過(guò)編譯之
15、后可以使用如下方法進(jìn)行運(yùn)行: ./生成的程序名 (其中“./” 表示當(dāng)前的工作目錄) 將生成的程序目錄加入到系統(tǒng)搜索路徑的PATH變量(我們將在Shell編程課程中進(jìn)行介紹) ?如果編譯過(guò)程出現(xiàn)錯(cuò)誤,需要進(jìn)行程序的調(diào)試,這時(shí)我們需要使用的工具是 gdb 程序調(diào)試工具gdb ?對(duì)于Linux程序員來(lái)講,GDB(GNU Debugger)通過(guò)與GCC的配合使用,為基于 Linux的軟件開(kāi)發(fā)提供了一個(gè)完善的調(diào)試環(huán)境。 ?默認(rèn)情況下,GCC在編譯時(shí)不會(huì)將調(diào)試符號(hào)插入到生成的二進(jìn)制代碼中,因?yàn)檫@樣會(huì)增加可執(zhí)行文件的大小。如果需要在編譯時(shí)生成調(diào)試符號(hào)信息,可以使 用GCC的-g或者-ggdb選項(xiàng)。 ?使用
16、任何一個(gè)調(diào)試選項(xiàng)都會(huì)使最終生成的二進(jìn)制文件的大小急劇增加,同時(shí)增加程序在執(zhí)行時(shí)的開(kāi)銷(xiāo),因此調(diào)試選項(xiàng)通常僅在軟件的開(kāi)發(fā)和調(diào)試階段使用。 程序調(diào)試工具gdb ? 我們使用如下代碼說(shuō)明gdb的使用: #include int main(void) int input =0; printf(Input an integer:); scanf(%d, input); printf(The integer you input is %dn, input); return 0; ? 編譯并運(yùn)行上述代碼,會(huì)產(chǎn)生一個(gè)嚴(yán)重的段錯(cuò)誤(Segmentation fault)如下: gcc -g crash.c -o crash ./crash Input an integer:10 Segmentation fault 程序調(diào)試工具gdb ?為了更快速地發(fā)現(xiàn)錯(cuò)誤所在,可以使用 gdb進(jìn)行跟蹤調(diào)試,方法如下: ?首先,在對(duì)源代碼進(jìn)行編譯時(shí)加入“-g” 選項(xiàng) 程序調(diào)試工具gdb ?使用gdb進(jìn)行程序的調(diào)試 ?我們可以通過(guò)使用命令
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國(guó)棉毯行業(yè)市場(chǎng)深度調(diào)研及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 2025-2030中國(guó)機(jī)器人流程自動(dòng)化(RPA)行業(yè)市場(chǎng)發(fā)展分析及前景趨勢(shì)與投資研究報(bào)告
- 2025-2030中國(guó)有聲書(shū)行業(yè)市場(chǎng)深度調(diào)研及前景趨勢(shì)與投資研究報(bào)告
- 2025-2030中國(guó)數(shù)字高清電視機(jī)行業(yè)市場(chǎng)深度分析及前景趨勢(shì)與投資研究報(bào)告
- 2025-2030中國(guó)排球網(wǎng)行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2025-2030中國(guó)承重框架行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2025-2030中國(guó)戰(zhàn)術(shù)光纜行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2025-2030中國(guó)干燥設(shè)備行業(yè)市場(chǎng)發(fā)展分析及競(jìng)爭(zhēng)格局與投資價(jià)值評(píng)估研究報(bào)告
- 2025-2030中國(guó)家用干燥劑干燥器行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2025-2030中國(guó)實(shí)驗(yàn)室冷水機(jī)行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2024年世界職業(yè)院校技能大賽高職組“市政管線(xiàn)(道)數(shù)字化施工組”賽項(xiàng)考試題庫(kù)
- 樁基及基坑支護(hù)工程技術(shù)施工方案(三篇)
- 司法考試2024年知識(shí)點(diǎn)背誦版-民法
- 2024年耐磨鑄件項(xiàng)目規(guī)劃申請(qǐng)報(bào)告樣文
- 重度哮喘診斷與處理中國(guó)專(zhuān)家共識(shí)(2024)解讀
- 新能源汽車(chē)電控系統(tǒng)的新型傳感器應(yīng)用考核試卷
- 蘇教版數(shù)學(xué)一年級(jí)下學(xué)期期中測(cè)試卷10套及但
- 2024年全國(guó)職業(yè)院校技能大賽高職組(法律實(shí)務(wù)賽項(xiàng))考試題庫(kù)(含答案)
- 全過(guò)程工程咨詢(xún)管理服務(wù)方案投標(biāo)方案(技術(shù)方案)
- 中鐵十五局集團(tuán)安全質(zhì)量部管理制度大全
- 2024老年燒創(chuàng)傷創(chuàng)面MEEK植皮技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論