c語言程序設(shè)計與項目實踐第16章_第1頁
c語言程序設(shè)計與項目實踐第16章_第2頁
c語言程序設(shè)計與項目實踐第16章_第3頁
c語言程序設(shè)計與項目實踐第16章_第4頁
c語言程序設(shè)計與項目實踐第16章_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、第16章 C語言調(diào)試 本章的學(xué)習(xí)重點注釋的編寫代碼風(fēng)格的設(shè)計程序單步調(diào)試程序斷點設(shè)置與調(diào)試 16.1 C語言開發(fā)入門 程序開發(fā)時養(yǎng)成良好的編程習(xí)慣以及掌握有效的編程規(guī)則將在程序開發(fā)中起到使辦公倍的效果。程序開發(fā)時最經(jīng)常遇到的兩個問題是代碼編寫和注釋編寫。代碼的編寫規(guī)范是程序能夠高效運行的保障,是編寫高質(zhì)量程序的指導(dǎo)說明書。注釋就像戲劇中的旁白,是幫助程序員理解程序的有效參照。 16.1.1 注釋的編寫 C語言中,代碼的注釋主要有三種表達(dá)形式,一種是使用”/”符號,一種是使用”/*”和”*/”符號,還有一種是采用宏編譯開關(guān)的形式。1使用”/”注釋代碼使用”/”注釋代碼時,應(yīng)將符號/放于注釋內(nèi)容的

2、左邊,此時,從/向后該行所有內(nèi)容都被作為注釋內(nèi)容看待。使用這種方式時,僅對單行產(chǎn)生作用,即僅對當(dāng)前行的”/”符號之后的信息加以注釋。例如,對某行代碼進行如下注釋:01if(0 = = num%2)/判斷是否是偶數(shù)0203printf(“偶數(shù).”);04使用”/”可以放在代碼后面,也可以是單獨的注釋行,例如:/Now start to calculate abstracty = abs(x);16.1.1 注釋的編寫 2使用”/*”和”*/”注釋代碼“/*”和”*/”用于單行和多行注釋。/*放于注釋內(nèi)容的開始位置,*/放于注釋內(nèi)容的結(jié)束位置。/*和*/位置不能顛倒。當(dāng)注釋內(nèi)容為單行時,可以使用下

3、面的注釋方式:/* define function max() */int max(int a, int b);當(dāng)注釋內(nèi)容為多行時,可以使用下面的注釋方式:/* 1: January2: Febrary3: March*/范例16.1 NotationType2.c 設(shè)計一個文件說明的注釋模版,將某項目工程的文件或函數(shù)簡明扼要的描述出來。包括項目名稱、文件名稱、文件主要功能等。要求內(nèi)容全面、簡潔、美觀大方。 16.1.1 注釋的編寫 3條件編譯開關(guān)注釋代碼為了有效避免這類情況出現(xiàn),可以使用條件編譯開關(guān)屏蔽部分代碼,這樣即容易操作,又便于程序維護和理解。例如,本書范例12.3中的代碼:01#if

4、 0/條件編譯02S = 4 * PI * r * r;/計算表面積03printf(半徑為 %f 的圓球表面積為:%fn, r, S);04#endif05V = 4 * PI * r * r * r/3.0;/計算體積06printf(半徑為 %f 的圓球體積為: %fn, r, V);代碼中第1行和第4行使用條件編譯方式屏蔽了代碼第2和第3行,當(dāng)需要將屏蔽的代碼釋放時,將第1行條件編譯值0改為1即可。 16.1.2 代碼風(fēng)格 1代碼縮進代碼的縮進將對代碼的美觀度產(chǎn)生較大影響,通常,為了提高代碼的美觀程度,函數(shù)體內(nèi)代碼按照層次關(guān)系依次縮進4個字符,函數(shù)不縮進。例如,有如下函數(shù)定義:01in

5、t max(int a, int b)0203 int max;04 if(ab)05 return a;06 else 07 return b;08上述代碼中,第1、2和8行屬于函數(shù)定義代碼,頂格編寫,函數(shù)體內(nèi),第3、4和6行為函數(shù)體內(nèi)的第1級代碼,縮進4個字符書寫,第5和第7行,為ifelse語句內(nèi)代碼,因此基于第4行和第6行縮進4個字符。 16.1.2 代碼風(fēng)格 2大括號封裝大括號單獨作為一行,并成對對應(yīng)。例如,對于ifelse語句、while語句、for循環(huán)語句、switch語句等,均使用大括號封裝,并且,大括號單獨占一行,如下面的if語句:01if(ab)0203return a;0

6、405else0607return b;083變量定義初始化基本數(shù)據(jù)類型的變量,定義時應(yīng)該初始化,如果不需要初始化的,則初始化為0,例如:int i = 0;float sum = 0;16.1.2 代碼風(fēng)格 此外,變量應(yīng)該定義在函數(shù)開頭位置,而不應(yīng)該定義在程序運行時,在使用for循環(huán)時,經(jīng)常有程序員使用下面不符合規(guī)范的定義方式:for(int i = 0; i10; i+)4避免使用復(fù)合運算符盡量避免使用晦澀難懂的運算符,特別是涉及多個運算符運算的表達(dá)式,需要考慮運算符優(yōu)先級和結(jié)合性時,應(yīng)避免這類代碼的出現(xiàn)。例如,下面的代碼均不是通俗易懂的代碼,應(yīng)該避免:a+b-;a+=b*=c+2; 16

7、.1.2 代碼風(fēng)格 5switch語句switch語句中一定要包含default語句。每個case應(yīng)包含一個break語句,若需要連續(xù)執(zhí)行幾個case表達(dá)式,則應(yīng)該使用輸出信息指示。最后,default語句應(yīng)該包含打印信息。例如:01switch(m)0203case 1: /case 104case 2:/case 20506printf(“1 & 2 cases Test OK!n”);07break;/break語句0809default:/default語句10printf(“ERROR: no suitable case.n”);11 16.1.2 代碼風(fēng)格 6宏定義宏名一律使用大寫

8、字母、下劃線和數(shù)字表示,應(yīng)避免使用帶參數(shù)的宏。宏名應(yīng)該簡明扼要,表達(dá)信息明確、清晰,字符盡量少。例如,下面的宏定義均應(yīng)避免:#define Ok 1#define 1_PRINT 107標(biāo)識符命名定義變量時可以使用特定的方式表示變量定義的數(shù)據(jù)類型,例如,可以對每個變量使用下面的前綴:in:intun:unsigned intch:charstr:structarr:arrayp:pointerl:longf:floatd:doubles:short 16.1.2 代碼風(fēng)格 8函數(shù)設(shè)計函數(shù)設(shè)計應(yīng)盡量簡單,一個函數(shù)完成一個功能模塊。函數(shù)名應(yīng)該重點體現(xiàn)函數(shù)的作用,并且設(shè)置統(tǒng)一的命名規(guī)則。函數(shù)一定要在

9、頭文件中加以聲明,以方便其他文件調(diào)用。函數(shù)入口處應(yīng)首先輸出函數(shù)調(diào)用的信息,以方便程序執(zhí)行時檢查程序的運行狀態(tài),對于非void類型的函數(shù),一定要返回值,并且在返回前應(yīng)輸出函數(shù)結(jié)束信息。例如,可以使用下面的定義方式:int C_language_Calc_Sum(int a, int b)printf(“Start to process function C_language_Calc_Sum()n”);printf(“Function C_language_Calc_Sum() end.n”);return xx; 16.1.2 代碼風(fēng)格 9入?yún)z查當(dāng)函數(shù)輸入?yún)?shù)為指針類型時,應(yīng)檢查指針是否為空

10、。例如,函數(shù)體內(nèi)應(yīng)做如下的檢查:01void C_language_Process_Student_Info(struct stu *pInputStuInfo)0203printf(“Start to process function C_language_Process_Student_Info().n”);04if(NULL = = pInputStuInfo)/入?yún)z查0506printf(“Error: input parameter is null.n”); 07return;/函數(shù)退出08091010數(shù)據(jù)檢查時變量應(yīng)放在= =或!=后面當(dāng)需要變量和常量進行關(guān)系比較時,為避免= =

11、或!=誤寫成=,應(yīng)將變量放在關(guān)系運算符后面,從而避免代碼鍵入錯誤時導(dǎo)致程序出現(xiàn)邏輯錯誤。例如,下面是合理的定義:if(NULL = =pStu) 16.2 C語言單步調(diào)試與跟蹤 1單步調(diào)試的類別單步調(diào)試分為函數(shù)內(nèi)部單步調(diào)試和函數(shù)調(diào)用單步調(diào)試兩種。2打開范例8.1程序3主函數(shù)體內(nèi)單步調(diào)試主函數(shù)內(nèi)單步調(diào)試可以通過按鍵F10執(zhí)行,也可以使用F11執(zhí)行。也可以通過菜單欄中Build/Start Debug/Step Into執(zhí)行。打開編譯通過的SubFuncCalcMaxVal.c所在的visual c+工程。 16.2 C語言單步調(diào)試與跟蹤 4單步調(diào)試?yán)^續(xù)按下F10鍵,程序?qū)㈨槾螆?zhí)行下去,當(dāng)程序執(zhí)行

12、到代碼第20行時,將等待鍵盤輸入?yún)?shù)m的值,此時需要在命令窗口輸入m的值,并按回車鍵進行下一步操作,如圖所示。 5被調(diào)函數(shù)單步調(diào)試當(dāng)輸入?yún)?shù)n的值后,程序?qū)⒌?3行以進行函數(shù)int max(int a, int b)的調(diào)用。此時應(yīng)鍵入F11以進入函數(shù)int max(int a, int b)體內(nèi)。如右圖所示。 16.2 C語言單步調(diào)試與跟蹤 6單步調(diào)試結(jié)束可以使用F11或F10按鍵繼續(xù)進行程序的跟蹤,當(dāng)程序執(zhí)行到第25行時,表示程序運行已結(jié)束,此時可以看到命令窗口輸出的結(jié)果,如下圖所示。 16.3 C語言斷點調(diào)試與跟蹤 斷點是程序調(diào)試時最常用的手段之一。在C語言中,斷點可以看成是一個輸入信號,

13、在程序調(diào)試階段,它通知調(diào)試器,在某個特定點上暫時中斷程序執(zhí)行,通常稱為程序的掛起。當(dāng)程序在某個斷點處掛起時,稱這種狀態(tài)為中斷模式。中斷模式下程序并不會終止,也不會結(jié)束程序的執(zhí)行,僅僅是將程序暫時停住,以備后續(xù)調(diào)查。當(dāng)需要繼續(xù)執(zhí)行程序時,可以按照一定的操作繼續(xù)執(zhí)行程序。 16.3.1 設(shè)置調(diào)試斷點 1設(shè)置位置斷點將光標(biāo)移動到要設(shè)置斷點的行,選擇要設(shè)置斷點的位置。通過快捷鍵F9可以設(shè)置斷點,設(shè)置斷點之后,在斷點行左側(cè)將出現(xiàn)紅色圓點,表示斷點設(shè)置成功。2設(shè)置條件斷點條件斷點是指在滿足某些設(shè)定的條件時斷點才起作用。可以通過快捷鍵Alt+F9打開Breakpoints對話框進行條件斷點設(shè)置。3設(shè)置WINDOWS消息斷點Windows消息類型斷點只能工作在x86或Pentium系統(tǒng)上。通過快捷鍵Alt+F9打開Breakpoints對話框,選擇Messages標(biāo)簽,在Break At WndProc文本框中輸入Windows函數(shù)的名稱,在Set One Breakpoint From Each Message To Watch 下拉列表框中選擇對應(yīng)的消息。 16.3.2 斷點調(diào)試 以實訓(xùn)8.1中的代碼為例,說明如何進行斷點調(diào)試。1設(shè)置斷點2斷點控制跳轉(zhuǎn)程序(1)啟動調(diào)試 (2)參數(shù)檢查及程序控制(3)條件中

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論