用VC編程環(huán)境學(xué)習(xí)C語(yǔ)言簡(jiǎn)介_(kāi)第1頁(yè)
用VC編程環(huán)境學(xué)習(xí)C語(yǔ)言簡(jiǎn)介_(kāi)第2頁(yè)
用VC編程環(huán)境學(xué)習(xí)C語(yǔ)言簡(jiǎn)介_(kāi)第3頁(yè)
用VC編程環(huán)境學(xué)習(xí)C語(yǔ)言簡(jiǎn)介_(kāi)第4頁(yè)
用VC編程環(huán)境學(xué)習(xí)C語(yǔ)言簡(jiǎn)介_(kāi)第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、.PAGE :.;MicrosoftVisualC+6.0引見(jiàn) 從2021年4月開(kāi)場(chǎng),全國(guó)計(jì)算機(jī)等級(jí)考試將全面停頓Turbo C2.0簡(jiǎn)稱(chēng)TC軟件的運(yùn)用,一切參與二級(jí)C言語(yǔ)、三級(jí)信息技術(shù)、網(wǎng)絡(luò)技術(shù)和數(shù)據(jù)庫(kù)技術(shù)上機(jī)考試的考生,都要在Visual C+6.0(簡(jiǎn)稱(chēng)VC)環(huán)境下調(diào)試運(yùn)轉(zhuǎn)C程序。眾所周知,VC軟件主要是用來(lái)開(kāi)發(fā)C+程序的,如何在VC下調(diào)試運(yùn)轉(zhuǎn)C程序,對(duì)于眾多學(xué)習(xí)者來(lái)說(shuō),確實(shí)是一個(gè)新的話(huà)題。VC與TC的差別,主要是表達(dá)在程序設(shè)計(jì)言語(yǔ)C+與C的關(guān)系上。其實(shí),了解計(jì)算機(jī)程序設(shè)計(jì)的人都知道,C+是C言語(yǔ)的晉級(jí)板,VC是在Windows進(jìn)展C+程序設(shè)計(jì)的主要軟件,VC完全兼容了C的功能,也就是說(shuō)

2、,在VC下是完全可以進(jìn)展C言語(yǔ)程序開(kāi)發(fā)。Visual C+ 6.0編程環(huán)境的運(yùn)用目 錄 TOC o 1-2 h z u HYPERLINK l _Toc244070294 1 編制并運(yùn)轉(zhuǎn)一個(gè)簡(jiǎn)單程序 PAGEREF _Toc244070294 h 1 HYPERLINK l _Toc244070295 1.1 編制并運(yùn)轉(zhuǎn)程序的“四步曲 PAGEREF _Toc244070295 h 1 HYPERLINK l _Toc244070296 1.2 工程(Project)以及工程任務(wù)區(qū)(Project Workspace) PAGEREF _Toc244070296 h 1 HYPERLINK l

3、 _Toc244070297 1.3 啟動(dòng)并進(jìn)入VC6的集成開(kāi)發(fā)環(huán)境 PAGEREF _Toc244070297 h 2 HYPERLINK l _Toc244070298 1.4 創(chuàng)建工程并輸入源程序代碼 PAGEREF _Toc244070298 h 3 HYPERLINK l _Toc244070299 1.5 不創(chuàng)建工程,直接輸入源程序代碼 PAGEREF _Toc244070299 h 7 HYPERLINK l _Toc244070300 1.6 編譯、鏈接而后運(yùn)轉(zhuǎn)程序 PAGEREF _Toc244070300 h 7 HYPERLINK l _Toc244070301 1.7

4、及時(shí)備份本人的創(chuàng)作 PAGEREF _Toc244070301 h 8 HYPERLINK l _Toc244070302 1.8 將本人設(shè)計(jì)的產(chǎn)品提供應(yīng)他人運(yùn)用 PAGEREF _Toc244070302 h 8 HYPERLINK l _Toc244070303 2 VC6集成開(kāi)發(fā)環(huán)境運(yùn)用參考 PAGEREF _Toc244070303 h 9 HYPERLINK l _Toc244070304 2.1 VC6的常用菜單命令項(xiàng) PAGEREF _Toc244070304 h 9 HYPERLINK l _Toc244070305 2.2 VC6的主要任務(wù)窗口 PAGEREF _Toc244

5、070305 h 11 HYPERLINK l _Toc244070306 3 嚴(yán)謹(jǐn)思想,調(diào)試程序 PAGEREF _Toc244070306 h 13 HYPERLINK l _Toc244070307 3.1 什么時(shí)候需求對(duì)程序進(jìn)展調(diào)試 PAGEREF _Toc244070307 h 13 HYPERLINK l _Toc244070308 3.2 對(duì)程序進(jìn)展調(diào)試的根本手段和方法 PAGEREF _Toc244070308 h 13 HYPERLINK l _Toc244070309 3.3 對(duì)一個(gè)簡(jiǎn)單程序的調(diào)試過(guò)程 PAGEREF _Toc244070309 h 15 HYPERLINK

6、 l _Toc244070310 3.4 設(shè)計(jì)適宜的程序調(diào)試方案 PAGEREF _Toc244070310 h 17 HYPERLINK l _Toc244070311 3.5 優(yōu)秀程序員的根本素質(zhì)豐富的想象、嚴(yán)謹(jǐn)?shù)乃枷?PAGEREF _Toc244070311 h 19 HYPERLINK l _Toc244070312 4 編譯與鏈接過(guò)程中常見(jiàn)的出錯(cuò)提示 PAGEREF _Toc244070312 h 20 HYPERLINK l _Toc244070313 4.1 常見(jiàn)編譯錯(cuò)誤 PAGEREF _Toc244070313 h 20 HYPERLINK l _Toc244070314

7、4.2 常見(jiàn)鏈接錯(cuò)誤 PAGEREF _Toc244070314 h 231 編制并運(yùn)轉(zhuǎn)一個(gè)簡(jiǎn)單程序1.1 編制并運(yùn)轉(zhuǎn)程序的“四步曲讓我們用VC6先來(lái)編制一個(gè)最簡(jiǎn)單的程序,并讓它運(yùn)轉(zhuǎn)(執(zhí)行)而得出結(jié)果,以此來(lái)作為了解VC6的開(kāi)端。這個(gè)程序的功能僅僅是向屏幕上輸出一個(gè)字符串“Hello World。程序雖小,但與編制運(yùn)轉(zhuǎn)大程序的整個(gè)過(guò)程是一樣的,都包含著如下所謂的“四步曲:(1)編輯(把程序代碼輸入,交給計(jì)算機(jī))。(2)編譯(成目的程序文件.obj)。編譯就是把高級(jí)言語(yǔ)變成計(jì)算機(jī)可以識(shí)別的二進(jìn)制言語(yǔ),計(jì)算機(jī)只認(rèn)識(shí)1和0,編譯程序把人們熟習(xí)的言語(yǔ)換成二進(jìn)制的。編譯程序把一個(gè)源程序翻譯成目的程序的任

8、務(wù)過(guò)程分為五個(gè)階段:詞法分析;語(yǔ)法分析;語(yǔ)義檢查和中間代碼生成;代碼優(yōu)化;目的代碼生成。主要是進(jìn)展詞法分析和語(yǔ)法分析,又稱(chēng)為源程序分析,分析過(guò)程中發(fā)現(xiàn)有語(yǔ)法錯(cuò)誤,給出提示信息。 (3)鏈接(成可執(zhí)行程序文件.exe)。鏈接是將編譯產(chǎn)生的.obj文件和系統(tǒng)庫(kù)銜接裝配成一個(gè)可以執(zhí)行的程序。由于在實(shí)踐操作中可以直接點(diǎn)擊Build從源程序產(chǎn)生可執(zhí)行程序,能夠有人就會(huì)置疑:為何要將源程序翻譯成可執(zhí)行文件的過(guò)程分為編譯和鏈接兩個(gè)獨(dú)立的步驟,不是多此一舉嗎?之所以這樣做,主要是由于:在一個(gè)較大的復(fù)雜工程中,有很多人共同完成一個(gè)工程(每個(gè)人能夠承當(dāng)其中一部分模塊),其中有的模塊能夠是用匯編言語(yǔ)寫(xiě)的,有的模塊能

9、夠是用VC寫(xiě)的,有的模塊能夠是用VB寫(xiě)的,有的模塊能夠是購(gòu)買(mǎi)(不是源程序模塊而是目的代碼)或已有的規(guī)范庫(kù)模塊,因此,各類(lèi)源程序都需求先各自編譯成目的程序文件(二進(jìn)制機(jī)器指令代碼),再經(jīng)過(guò)鏈接程序?qū)⑦@些目的程序文件銜接裝配成可執(zhí)行文件。(4)運(yùn)轉(zhuǎn)(可執(zhí)行程序文件)。上述四個(gè)步驟中,其中第一步的編輯任務(wù)是最繁雜而又必需細(xì)致地由人工在計(jì)算機(jī)上來(lái)完成,其他幾個(gè)步驟那么相對(duì)簡(jiǎn)單,根本上由計(jì)算機(jī)自動(dòng)完成。1.2 工程(Project)以及工程任務(wù)區(qū)(Project Workspace)在開(kāi)場(chǎng)編程之前,必需先了解工程Project(也稱(chēng)“工程,或稱(chēng)“工程工程)的概念。工程又稱(chēng)為工程,它具有兩種含義,一種是指

10、最終生成的運(yùn)用程序,另一種那么是為了創(chuàng)建這個(gè)運(yùn)用程序所需的全部文件的集合,包括各種源程序、資源文件和文檔等等。絕大多數(shù)較新的開(kāi)發(fā)工具都利用工程來(lái)對(duì)軟件開(kāi)發(fā)過(guò)程進(jìn)展管理。用VC6編寫(xiě)并處置的任何程序都與工程有關(guān)(都要?jiǎng)?chuàng)建一個(gè)與其相關(guān)的工程),而每一個(gè)工程又總與一個(gè)工程任務(wù)區(qū)相關(guān)聯(lián)。任務(wù)區(qū)是對(duì)工程概念的擴(kuò)展。一個(gè)工程的目的是生成一個(gè)運(yùn)用程序,但很多大型軟件往往需求同時(shí)開(kāi)發(fā)數(shù)個(gè)運(yùn)用程序,VC開(kāi)發(fā)環(huán)境允許用戶(hù)在一個(gè)任務(wù)區(qū)內(nèi)添加數(shù)個(gè)工程,其中有一個(gè)是活動(dòng)的(缺省的),每個(gè)工程都可以獨(dú)立進(jìn)展編譯、銜接和調(diào)試。實(shí)踐上,VC6是經(jīng)過(guò)工程任務(wù)區(qū)來(lái)組織工程及其各相關(guān)元素的,就好似是一個(gè)任務(wù)間(對(duì)應(yīng)于一個(gè)獨(dú)立的文件

11、夾,或稱(chēng)子目錄),以后程序所牽扯到的一切的文件、資源等元素都將放入到這一任務(wù)間中,從而使得各個(gè)工程之間互不干擾,使編程任務(wù)更有條理,更具模塊化。最簡(jiǎn)單情況下,一個(gè)任務(wù)區(qū)中用來(lái)存放一個(gè)工程,代表著某一個(gè)要進(jìn)展處置的程序(我們先學(xué)習(xí)這種用法)。但假設(shè)需求,一個(gè)任務(wù)區(qū)中也可以用來(lái)存放多個(gè)工程,其中可以包含該工程的子工程或者與其有依賴(lài)關(guān)系的其他工程。可看出,工程任務(wù)區(qū)就像是一個(gè)“容器,由它來(lái)“盛放相關(guān)工程的一切有關(guān)信息,當(dāng)創(chuàng)建新工程時(shí),同時(shí)要?jiǎng)?chuàng)建這樣一個(gè)工程任務(wù)區(qū),而后那么經(jīng)過(guò)該任務(wù)區(qū)窗口來(lái)察看與存取此工程的各種元素及其有關(guān)信息。創(chuàng)建工程任務(wù)區(qū)之后,系統(tǒng)將創(chuàng)建出一個(gè)相應(yīng)的任務(wù)區(qū)文件(.dsw),用來(lái)存

12、放與該任務(wù)區(qū)相關(guān)的信息;另外還將創(chuàng)建出的其他幾個(gè)相關(guān)文件是:工程文件(.dsp)以及選擇信息文件(.opt)等。編制并處置C+程序時(shí)要?jiǎng)?chuàng)建工程,VC6曾經(jīng)預(yù)先為用戶(hù)預(yù)備好了近種不同的工程類(lèi)型以供選擇,選定不同的類(lèi)型意味著讓VC6系統(tǒng)幫著提早做某些不同的預(yù)備以及初始化任務(wù)(例如,事先為用戶(hù)自動(dòng)生成一個(gè)所謂的底層程序框架或稱(chēng)框架程序,并進(jìn)展某些隱含設(shè)置,如隱含位置、預(yù)定義常量、輸出結(jié)果類(lèi)型等)。工程類(lèi)型中,其中有一個(gè)為“Win32 Console Application,它是我們首先要掌握的、用來(lái)編制運(yùn)轉(zhuǎn)C+程序方法中最簡(jiǎn)單的一種。此種類(lèi)型的程序運(yùn)轉(zhuǎn)時(shí),將出現(xiàn)并運(yùn)用一個(gè)類(lèi)似于DOS的窗口,并提供對(duì)

13、字符方式的各種處置與支持。實(shí)踐上,提供的只是具有嚴(yán)厲的采用光標(biāo)而不是鼠標(biāo)挪動(dòng)的界面。此種類(lèi)型的工程小巧而簡(jiǎn)單,但已足以處理并支持本課程中涉及到的一切編程內(nèi)容與技術(shù),使我們把重點(diǎn)放在程序的編制而并非界面處置等方面,至于VC6支持的其他工程類(lèi)型(其中有許多還將涉及到Windows或其他的編程技術(shù)與知識(shí)),有待在今后的不斷學(xué)習(xí)中來(lái)逐漸了解、掌握與運(yùn)用。1.3 啟動(dòng)并進(jìn)入VC6的集成開(kāi)發(fā)環(huán)境圖1-1 VC6的集成開(kāi)發(fā)環(huán)境窗口了解了工程及其上述普通概念后,如今就讓我們開(kāi)場(chǎng)Visual C+ 6.0之旅吧!首先按如下兩種方法之一啟動(dòng)并運(yùn)轉(zhuǎn)VC6,進(jìn)入到它的集成開(kāi)發(fā)環(huán)境窗口(假設(shè)在Windows系統(tǒng)下曾經(jīng)安

14、裝了VC6),其詳細(xì)窗口式樣如圖1-1所示。方法一:假設(shè)桌面上有VC6圖標(biāo)(“橫躺著即“倒下的“8字型圖標(biāo),且標(biāo)有“Microsoft Visual Studio 6.0字樣,如圖1-2所示),那么用鼠標(biāo)雙擊該圖標(biāo)。圖1-2 VC6在桌面上的快捷方式方法二(假設(shè)按照通常方式對(duì)VC6進(jìn)展了安裝的話(huà)):經(jīng)過(guò)“開(kāi)場(chǎng)“程序“Microsoft Visual Studio 6.0“Microsoft Visual C+ 6.0,單擊一下該菜單項(xiàng)。圖1-1式樣的窗口從大體上可分為四部分。上部:菜單和工具條;中左:任務(wù)區(qū)(workspace)視圖顯示窗口,這里將顯示處置過(guò)程中與工程相關(guān)的各種文件種類(lèi)等信息;

15、中右:文檔內(nèi)容區(qū),是顯示和編輯程序文件的操作區(qū);下部:輸出(Output)窗口區(qū),程序調(diào)試過(guò)程中,進(jìn)展編譯、鏈接、運(yùn)轉(zhuǎn)時(shí)輸出的相關(guān)信息將在此處顯示。留意,由于系統(tǒng)的初始設(shè)置或者環(huán)境的某些不同,能夠他所啟動(dòng)的VC6初始窗口式樣與圖1-1有所不同,也許會(huì)沒(méi)出現(xiàn)Workspace窗口或Output窗口,這時(shí)可經(jīng)過(guò)“ViewWorkspace菜單項(xiàng)選擇項(xiàng)的執(zhí)行,總可使中左處的任務(wù)區(qū)窗口顯現(xiàn)出來(lái);而經(jīng)過(guò)“ViewOutput菜單項(xiàng)選擇項(xiàng)的執(zhí)行,又總可使下部的輸出區(qū)窗口得以顯現(xiàn)。當(dāng)然,假設(shè)不想看到這兩個(gè)窗口,可以點(diǎn)擊相應(yīng)窗口的“x按鍵來(lái)封鎖窗口。1.4 創(chuàng)建工程并輸入源程序代碼為了把程序代碼輸入而交給計(jì)算

16、機(jī),需求運(yùn)用VC6的編輯器來(lái)完成。如前所述,首先要?jiǎng)?chuàng)建工程以及工程任務(wù)區(qū),而后才干輸入詳細(xì)程序完成所謂的“編輯任務(wù)(留意,該步任務(wù)在四步驟中最繁雜、而又必需細(xì)致地由人工來(lái)完成!)。圖1-3 新建一個(gè)名為Sample的工程(同時(shí)自動(dòng)創(chuàng)建一任務(wù)區(qū))(1)新建一Win32 Console Application工程選擇菜單File下的New項(xiàng),會(huì)出現(xiàn)一個(gè)選擇界面,在屬性頁(yè)中選擇Projects標(biāo)簽后,會(huì)看到近20種的工程類(lèi)型,我們只需選擇其中最簡(jiǎn)單的一種:“Win32Console Application,而后往右上處的“Location文本框和“Project name文本框中填入工程相關(guān)信息所存

17、放的磁盤(pán)位置(目錄或文件夾位置)以及工程的名字,設(shè)置到此時(shí)的界面信息如圖1-3所示。在圖1-3中,“Location文本框中填入如“D:myDataVC6,這是假設(shè)他預(yù)備在D磁盤(pán)的myDataVC6文件夾即子目錄下存放與工程任務(wù)區(qū)相關(guān)的一切文件及其相關(guān)信息,當(dāng)然也可經(jīng)過(guò)點(diǎn)擊其右部的“按鈕去選擇并指定這一文件夾即子目錄位置。“Project name文本框中填入如“Sample的工程名(留意,名字由他根據(jù)工程性質(zhì)確定,此時(shí)VC6會(huì)自動(dòng)在其下的Location文本框中用該工程名“Sample為他建立一個(gè)同名子目錄,隨后的工程文件以及其他相關(guān)文件都將存放在這個(gè)目錄下)。選擇OK按鈕進(jìn)入下一個(gè)選擇界面

18、。這個(gè)界面主要是訊問(wèn)用戶(hù)想要構(gòu)成一個(gè)什么類(lèi)型的工程,其界面如圖1-4所示。圖1-4 選擇創(chuàng)建一個(gè)什么樣的工程假設(shè)選擇“An empty project項(xiàng)將生成一個(gè)空的工程,工程內(nèi)不包括任何東西。假設(shè)選擇“A simple application項(xiàng)將生成包含一個(gè)空的main函數(shù)和一個(gè)空的頭文件的工程。選“AHello World!application項(xiàng)與選“A simple application項(xiàng)沒(méi)有什么本質(zhì)的區(qū)別,只是需求包含有顯示出“Hello World!字符串的輸出語(yǔ)句。選擇“An application that supports MFC項(xiàng)的話(huà),可以利用VC6所提供的類(lèi)庫(kù)來(lái)進(jìn)展編程

19、。為了更清楚的看到編程的各個(gè)環(huán)節(jié),我們選擇“An empty project項(xiàng),從一個(gè)空的工程來(lái)開(kāi)場(chǎng)我們的任務(wù)。單擊Finish按鈕,這時(shí)VC6會(huì)為他生成一個(gè)小型報(bào)告,報(bào)告的內(nèi)容是剛剛一切選擇項(xiàng)的總結(jié),并且訊問(wèn)他能否接受這些設(shè)置。假設(shè)接受選擇OK按鈕,否那么選擇Cancel按鈕。我們選OK從而可進(jìn)入到真正的編程環(huán)境下了。界面情況如圖1-5所示。圖1-5 剛完成創(chuàng)建工程Sample的VC6集成開(kāi)發(fā)環(huán)境窗口(2)在任務(wù)區(qū)窗口中查看工程的邏輯架構(gòu)留意屏幕中的Workspace窗口,該窗口中有兩個(gè)標(biāo)簽,一個(gè)是ClassView,一個(gè)是FileView。ClassView中列出的是這個(gè)工程中所包含的一切

20、類(lèi)的有關(guān)信息,當(dāng)然我們的程序?qū)⒉簧婕暗筋?lèi),這個(gè)標(biāo)簽中如今是空空如也。點(diǎn)擊FileView標(biāo)簽后,將看到這個(gè)工程所包含的一切文件信息。點(diǎn)擊“+圖標(biāo)翻開(kāi)一切的層次會(huì)發(fā)現(xiàn)有三個(gè)邏輯文件夾:Source Files文件夾中包含了工程中一切的源文件;Header Files文件夾中包含了工程中一切的頭文件;Resource Files文件夾中包含了工程中一切的資源文件。所謂資源就是工程中所用到的位圖,加速鍵等信息,在我們的編程中不會(huì)牽扯到這一部分內(nèi)容。如今FileView中也不包含任何東西。邏輯文件夾是邏輯上的,他們只是在工程的配置文件中定義的,在磁盤(pán)上并沒(méi)有物理地存在這三個(gè)文件夾。我們也可以刪除本人不

21、運(yùn)用的邏輯文件夾;或者根據(jù)我們工程的需求,創(chuàng)建新的邏輯文件夾,來(lái)組織工程文件。這三個(gè)邏輯文件夾是VC預(yù)先定義的,就編寫(xiě)簡(jiǎn)單的單一源文件的C程序而言,我們只需求運(yùn)用Source Files一個(gè)文件夾就夠了。 (3)在工程中新建C源程序文件并輸入源程序代碼下面該輪到生成一個(gè)“Hello.cpp的源程序文件,而后經(jīng)過(guò)編輯界面來(lái)輸入所需的源程序代碼。選擇菜單Project中子菜單Add To Project下的new項(xiàng),在出現(xiàn)的對(duì)話(huà)框的Files標(biāo)簽(選項(xiàng)卡)中,選擇“C+ Source File項(xiàng),在右中處的File文本框中為將要生成的文件取一個(gè)名字,我們?nèi)∶麨镠ello(其他遵照系統(tǒng)隱含設(shè)置,此時(shí)

22、系統(tǒng)將運(yùn)用Hello.cpp的文件來(lái)保管所鍵入的源程序),此時(shí)的界面情況如圖1-6所示。而后選擇OK按鈕,進(jìn)入輸入源程序的編輯窗口(留意所出現(xiàn)的呈現(xiàn)“閃爍形狀的輸入位置光標(biāo)),此時(shí)只需經(jīng)過(guò)鍵盤(pán)輸入他所需求的源程序代碼:#include void main()printf(Hello World!n);圖1-6 選擇在工程Sample中新建一名為Hello.cpp的C源程序文件可經(jīng)過(guò)Workspace窗口中的FileView標(biāo)簽,看到Source Files文件夾下文件Hello.cpp曾經(jīng)被加了進(jìn)去,此時(shí)的界面情況如圖1-7所示。圖1-7 在Hello.cpp輸入C源程序代碼實(shí)踐上,這時(shí)在Wo

23、rkspace窗口的ClassView標(biāo)簽中的Globals文件夾下,也可以看到我們剛剛所鍵入的main函數(shù)。1.5 不創(chuàng)建工程,直接輸入源程序代碼不需求象前面描畫(huà)的那樣顯示地創(chuàng)新一個(gè)工程,對(duì)于新編寫(xiě)一個(gè)程序,只需求在圖1-3所示的界面中,選“Files標(biāo)簽,再選擇“C+ Source File,其界面與圖1-6類(lèi)似(僅Add to projec是暗淡的、無(wú)法選擇),后續(xù)操作那么與前述一樣。最簡(jiǎn)單的做法是:直接運(yùn)用工具欄上的新建文件按鈕“新建一空白文件,緊接著單擊工具欄上的保管按鈕“保管此空文件留意,保管時(shí)一定要以“.c或“.cpp作為擴(kuò)展名,否那么邏輯程序時(shí)自動(dòng)格式化和特殊顯示等很多特性將無(wú)

24、法運(yùn)用,程序無(wú)法被運(yùn)轉(zhuǎn)。這種方式新建的C源程序文件在編譯時(shí),會(huì)提示用戶(hù),要求允許系統(tǒng)為其創(chuàng)新一個(gè)默許的工程(含相應(yīng)的任務(wù)區(qū))。1.6 編譯、鏈接而后運(yùn)轉(zhuǎn)程序程序編制完成(即所謂“四步曲中第一步的編輯任務(wù)得以完成)之后,就可以進(jìn)展后三步的編譯、鏈接與運(yùn)轉(zhuǎn)了。一切后三步的命令項(xiàng)都處在菜單Build之中。留意,在對(duì)程序進(jìn)展編譯、鏈接和運(yùn)轉(zhuǎn)前,最好先保管本人的工程(運(yùn)用“FileSave All菜單項(xiàng))以防止程序運(yùn)轉(zhuǎn)時(shí)系統(tǒng)發(fā)生不測(cè)而使本人之前的任務(wù)付之東流,應(yīng)讓這種做法成為本人的習(xí)慣、素質(zhì)。首先選擇執(zhí)行菜單第一項(xiàng)Compile,此時(shí)將對(duì)程序進(jìn)展編譯。假設(shè)編譯中發(fā)現(xiàn)錯(cuò)誤(error)或警告(warnin

25、g),將在Output窗口中顯示出它們所在的行以及詳細(xì)的出錯(cuò)或警告信息,可以經(jīng)過(guò)這些信息的提示來(lái)糾正程序中的錯(cuò)誤或警告(留意,錯(cuò)誤是必需糾正的,否那么無(wú)法進(jìn)展下一步的鏈接;而警告那么不然,它并不影響進(jìn)展下一步,當(dāng)然最好還是能把一切的警告也“消滅掉)。當(dāng)沒(méi)有錯(cuò)誤與警告出現(xiàn)時(shí),Output窗口所顯示的最后一行應(yīng)該是:“Hello.obj-0 error(s), 0warning(s)。圖1-8 程序Hello.cpp的運(yùn)轉(zhuǎn)結(jié)果界面編譯經(jīng)過(guò)后,可以選擇菜單的第二項(xiàng)Build來(lái)進(jìn)展鏈接生成可執(zhí)行程序。在鏈接中出現(xiàn)的錯(cuò)誤也將顯示到Output窗口中。鏈接勝利后,Output窗口所顯示的最后一行應(yīng)該是:“

26、Sample.exe-0 error(s), 0 warning(s)。最后就可以運(yùn)轉(zhuǎn)(執(zhí)行)我們所編制的程序了,選擇Execute項(xiàng)(該選項(xiàng)前有一個(gè)深色的感慨號(hào)標(biāo)志“!,實(shí)踐上也可經(jīng)過(guò)單擊窗口上部工具欄中的深色感慨號(hào)標(biāo)志“!來(lái)啟動(dòng)執(zhí)行該選項(xiàng)),VC6將運(yùn)轉(zhuǎn)曾經(jīng)編好的程序,執(zhí)行后將出現(xiàn)一個(gè)結(jié)果界面(所謂的類(lèi)似于DOS窗口的界面),如圖1-8所示,其中的“press any key to continue是由系統(tǒng)產(chǎn)生的,使得用戶(hù)可以閱讀輸出結(jié)果,直到按下了任一個(gè)鍵盤(pán)按鍵時(shí)為止(那時(shí)又將前往到集成界面的編輯窗口處)。至此我們?cè)?jīng)生成并運(yùn)轉(zhuǎn)(執(zhí)行)了一個(gè)完好的程序,完成了一個(gè)“回合的編程義務(wù)。此時(shí)應(yīng)

27、執(zhí)行“FileClose Workspace菜單項(xiàng),待系統(tǒng)訊問(wèn)能否封鎖一切的相關(guān)窗口時(shí),回答“是,那么終了了一個(gè)程序從輸入到執(zhí)行的全過(guò)程,回到了剛剛啟動(dòng)VC6的那一個(gè)初始畫(huà)面。1.7 及時(shí)備份本人的創(chuàng)作(1)完全備份。對(duì)于剛剛?cè)蝿?wù)的工程Sample而言,只需將D:myDataVC6下的文件夾Sample復(fù)制到U盤(pán)或打包成一個(gè)文件后放到本人的郵箱。需求在其它計(jì)算機(jī)上繼續(xù)完成該工程時(shí),將該文件夾復(fù)制到該計(jì)算機(jī)的硬盤(pán)上,進(jìn)入VC6,經(jīng)過(guò)“FileOpen Workspace菜單項(xiàng)將該工程翻開(kāi)即可。(2)只備份C源程序文件。對(duì)于剛剛?cè)蝿?wù)的工程Sample而言,工程非常簡(jiǎn)單,沒(méi)有什么專(zhuān)門(mén)的設(shè)置,因此,僅

28、備份其中的C源程序Hello.cpp就足矣。需求在其它計(jì)算機(jī)上繼續(xù)完成該程序時(shí),只需將備份的程序復(fù)制到該計(jì)算機(jī)的硬盤(pán)上,進(jìn)入VC6,根據(jù)前面的講述,新建一Win32 Console Application(做到圖1-5所示的界面),然后經(jīng)過(guò)“ProjectAdd to ProjectFiles菜單項(xiàng)將Hello.cpp添加新建的工程中。最簡(jiǎn)單的做法是:直接運(yùn)用工具欄上的文件翻開(kāi)按鈕“翻開(kāi)Hello.cpp。1.8 將本人設(shè)計(jì)的產(chǎn)品提供應(yīng)他人運(yùn)用需求將本人設(shè)計(jì)的產(chǎn)品提供應(yīng)他人運(yùn)用時(shí),針對(duì)前述的Sample工程,只需將鏈接產(chǎn)生的可執(zhí)行文件Sample.exe復(fù)制/發(fā)送給他人即可,不能復(fù)制整個(gè)工程文

29、件夾或復(fù)制.cpp文件,這是由于:(1)復(fù)制可執(zhí)行文件已足夠。(2)復(fù)制整個(gè)工程文件夾或復(fù)制.cpp文件,等于提供了本人的詳細(xì)設(shè)計(jì),在商業(yè)上普通是不這樣做了,除非事先雙方談妥需求這樣做或?qū)Ψ角樵赋龈邇r(jià)購(gòu)買(mǎi)他的詳細(xì)設(shè)計(jì)。圖1-9 選擇生成什么類(lèi)型的可執(zhí)行程序另外,該當(dāng)闡明的是:前面所說(shuō)的編譯、鏈接過(guò)程都是Debug類(lèi)型的,也就是說(shuō),當(dāng)VC6在進(jìn)展這些任務(wù)時(shí)將參與一些調(diào)試信息,致使編譯鏈接后生成的代碼很龐大,效率也降低。假設(shè)確信他的程序曾經(jīng)完美無(wú)缺或者是要正式發(fā)布,就應(yīng)該選擇菜單Build中的Batch Build項(xiàng),產(chǎn)生如圖1-9所示的對(duì)話(huà)框,其中的兩個(gè)選項(xiàng)分別代表編譯的代碼方式。假設(shè)選擇第一項(xiàng)

30、Release,那么生成的就是最終代碼,其運(yùn)轉(zhuǎn)效率會(huì)增高。選擇Sample-Win32 Release項(xiàng),再進(jìn)展Build或Rebuild All就會(huì)在工程所在的目錄下產(chǎn)生一個(gè)新的目錄release,在release目錄下生成的可執(zhí)行程序代碼規(guī)模小,執(zhí)行效率高,是我們最后的產(chǎn)品。2 VC6集成開(kāi)發(fā)環(huán)境運(yùn)用參考2.1 VC6的常用菜單命令項(xiàng)(1)File菜單New:翻開(kāi)“new對(duì)話(huà)框,以便創(chuàng)建新的文件、工程或任務(wù)區(qū)。Close Workspace:封鎖與任務(wù)區(qū)相關(guān)的一切窗口。Exit:退出VC6環(huán)境,將提示保管窗口內(nèi)容等。(2)Edit菜單Cut:快捷鍵Ctrl+X。將選定內(nèi)容復(fù)制到剪貼板,然后

31、再?gòu)漠?dāng)前活動(dòng)窗口中刪除所選內(nèi)容。與“Paste結(jié)合運(yùn)用可以挪動(dòng)選定的內(nèi)容。Copy:快捷鍵Ctrl+C。將選定內(nèi)容復(fù)制到剪貼板,但不從當(dāng)前活動(dòng)窗口中刪除所選內(nèi)容。與“Paste結(jié)合運(yùn)用可以復(fù)制選定的內(nèi)容。Paste:快捷鍵Ctrl+V。將剪貼板中的內(nèi)容插入(粘貼)到當(dāng)前鼠標(biāo)指針?biāo)诘奈恢?。留意,必需先運(yùn)用Cut或Copy使剪貼板中具有預(yù)備粘貼的內(nèi)容。Find:快捷鍵Ctrl+F。在當(dāng)前文件中查找指定的字符串。順便指出,可按快捷鍵F3尋覓下一個(gè)匹配的字符串。Find in Files:在指定的多個(gè)文件中查找指定的字符串。Replace:快捷鍵Ctrl+H。交換指定的字符串(用某一個(gè)串交換另一個(gè)串

32、)。Go To: 快捷鍵Ctrl+G。將光標(biāo)移到指定行上。Breakpoints:快捷鍵Alt+F9。彈出對(duì)話(huà)框,用于設(shè)置、刪除或查看程序中的一切斷點(diǎn)。斷點(diǎn)將通知調(diào)試器應(yīng)該在何時(shí)何地暫停程序的執(zhí)行,以便查看當(dāng)時(shí)的變量取值等現(xiàn)場(chǎng)情況。(3)View菜單Workspace:假設(shè)任務(wù)區(qū)窗口沒(méi)顯示出來(lái),選擇執(zhí)行該項(xiàng)后將顯示出任務(wù)區(qū)窗口。Output:假設(shè)輸出窗口沒(méi)顯示出來(lái),選擇執(zhí)行該項(xiàng)后將顯示出輸出窗口。輸出窗口中將隨時(shí)顯示有關(guān)的提示信息或出錯(cuò)警告信息等。(4)Project菜單Add To Project:選擇該項(xiàng)將彈出子菜單,用于添加文件或數(shù)據(jù)鏈接等到工程之中去。例如子菜單中的New選項(xiàng)可用于添加

33、“C+ Source File或“C/C+ Header File;而子菜單中的Files選項(xiàng)那么用于插入已有的文件到工程中。Settings:為工程進(jìn)展各種不同的設(shè)置。中選擇其中的“Debug標(biāo)簽(選項(xiàng)卡),并經(jīng)過(guò)在“Program arguments:文本框中填入以空格分割的各命令行參數(shù)后,那么可以為帶參數(shù)的main函數(shù)提供相應(yīng)參數(shù)(呼應(yīng)于“void main(int argc, char* argv )方式的main函數(shù)中所需各argv數(shù)組的各字符串參數(shù)值)。留意,在執(zhí)行帶參數(shù)的main函數(shù)之前,必需進(jìn)展該設(shè)置,當(dāng)“Program arguments:文本框中為空時(shí),意味著無(wú)命令行參數(shù)。

34、(5)Build菜單Compile:快捷鍵Ctrl+F7。編譯當(dāng)前處于源代碼窗口中的源程序文件,以便檢查能否有語(yǔ)法錯(cuò)誤或警告,假設(shè)有的話(huà),將顯示在Output輸出窗口中。Build:快捷鍵F7。對(duì)當(dāng)前工程中的有關(guān)文件進(jìn)展銜接,假設(shè)出現(xiàn)錯(cuò)誤的話(huà),也將顯示在Output輸出窗口中。Execute:快捷鍵Ctrl+F5。運(yùn)轉(zhuǎn)(執(zhí)行)曾經(jīng)編譯、銜接勝利的可執(zhí)行程序(文件)。Start Debug:選擇該項(xiàng)將彈出子菜單,其中含有用于啟動(dòng)調(diào)試器運(yùn)轉(zhuǎn)的幾個(gè)選項(xiàng)。例如其中的Go選項(xiàng)用于從當(dāng)前語(yǔ)句開(kāi)場(chǎng)執(zhí)行程序,直到遇到斷點(diǎn)或遇到程序終了;Step Into選項(xiàng)開(kāi)場(chǎng)單步執(zhí)行程序,并在遇到函數(shù)調(diào)用時(shí)進(jìn)入函數(shù)內(nèi)部再?gòu)?/p>

35、頭單步執(zhí)行;Run to Cursor選項(xiàng)使程序運(yùn)轉(zhuǎn)到當(dāng)前鼠標(biāo)光標(biāo)所在行時(shí)暫停其執(zhí)行(留意,運(yùn)用該選項(xiàng)前,要先將鼠標(biāo)光標(biāo)設(shè)置到某一個(gè)他希望暫停的程序行處)。執(zhí)行該菜單的選擇項(xiàng)后,就啟動(dòng)了調(diào)試器,此時(shí)菜單欄中將出現(xiàn)Debug菜單(而取代了Build菜單)。(6)Debug菜單啟動(dòng)調(diào)試器后才出現(xiàn)該Debug菜單(而不再出現(xiàn)Build菜單)。Go:快捷鍵F5。從當(dāng)前語(yǔ)句啟動(dòng)繼續(xù)運(yùn)轉(zhuǎn)程序,直到遇到斷點(diǎn)或遇到程序終了而停頓(與BuildStart DebugGo選項(xiàng)的功能一樣)。Restart:快捷鍵Ctrl+Shift+F5。重新從頭開(kāi)場(chǎng)對(duì)程序進(jìn)展調(diào)試執(zhí)行(當(dāng)對(duì)程序做過(guò)某些修正后往往需求這樣做!)。選

36、擇該項(xiàng)后,系統(tǒng)將重新裝載程序到內(nèi)存,并放棄一切變量的當(dāng)前值(而重新開(kāi)場(chǎng))。Stop Debugging:快捷鍵Shift+F5。中斷當(dāng)前的調(diào)試過(guò)程并前往正常的編輯形狀(留意,系統(tǒng)將自動(dòng)封鎖調(diào)試器,并重新運(yùn)用Build菜單來(lái)取代Debug菜單)。Step Into:快捷鍵F11。單步執(zhí)行程序,并在遇到函數(shù)調(diào)用語(yǔ)句時(shí),進(jìn)入那一函數(shù)內(nèi)部,并從頭單步執(zhí)行(與BuildStart DebugStep Into選項(xiàng)的功能一樣)。Step Over:快捷鍵F10。單步執(zhí)行程序,但當(dāng)執(zhí)行到函數(shù)調(diào)用語(yǔ)句時(shí),不進(jìn)入那一函數(shù)內(nèi)部,而是一步直接執(zhí)行完該函數(shù)后,接著再執(zhí)行函數(shù)調(diào)用語(yǔ)句后面的語(yǔ)句。Step Out:快捷鍵

37、Shift+F11。與“Step Into配合運(yùn)用,當(dāng)執(zhí)行進(jìn)入到函數(shù)內(nèi)部,單步執(zhí)行假設(shè)干步之后,假設(shè)發(fā)現(xiàn)不再需求進(jìn)展單步伐試的話(huà),經(jīng)過(guò)該選項(xiàng)可以從函數(shù)內(nèi)部前往(到函數(shù)調(diào)用語(yǔ)句的下一語(yǔ)句處停頓)。Run to Cursor:快捷鍵Ctrl+F10。使程序運(yùn)轉(zhuǎn)到當(dāng)前鼠標(biāo)光標(biāo)所在行時(shí)暫停其執(zhí)行(留意,運(yùn)用該選項(xiàng)前,要先將鼠標(biāo)光標(biāo)設(shè)置到某一個(gè)他希望暫停的程序行處)?,F(xiàn)實(shí)上,相當(dāng)于設(shè)置了一個(gè)暫時(shí)斷點(diǎn),與BuildStart DebugRun to Cursor選項(xiàng)的功能一樣。Insert/Remove Breakpoint:快捷鍵F9。本菜單項(xiàng)并未出如今Debug菜單上(在工具欄和程序文檔的上下文關(guān)聯(lián)菜

38、單上),列在此處是為了方便大家掌握程序調(diào)試的手段,其功能是設(shè)置或取消固定斷點(diǎn)程序行前有一個(gè)圓形的黑點(diǎn)標(biāo)志,表示曾經(jīng)該行設(shè)置了固定斷點(diǎn)。另外,與固定斷點(diǎn)相關(guān)的還有Alt+F9(管理程序中的一切斷點(diǎn))、Ctrl+F9(禁用/使能當(dāng)前斷點(diǎn))。(7)Help菜單經(jīng)過(guò)該菜單來(lái)查看VC6的各種聯(lián)機(jī)協(xié)助 信息。(8)上下文關(guān)聯(lián)菜單除了主菜單和工具欄外,VC6開(kāi)發(fā)環(huán)境還提供了大量的上下文關(guān)聯(lián)菜單,用鼠標(biāo)右鍵的單擊窗口中很多地方都會(huì)彈出一個(gè)關(guān)聯(lián)菜單,里面包含有與被單擊工程相關(guān)的各種命令,建議大家在任務(wù)時(shí)可以試著多點(diǎn)點(diǎn)鼠標(biāo)右鍵,說(shuō)不定會(huì)發(fā)現(xiàn)很多有用的命令,從而大大加快一些常規(guī)操作的速度。2.2 VC6的主要任務(wù)窗

39、口(1)Workspace窗口Workspace窗口顯示了當(dāng)前任務(wù)區(qū)中各個(gè)工程的類(lèi)、資源和文件信息,當(dāng)新建或翻開(kāi)一個(gè)任務(wù)區(qū)后,Workspace窗口通常就會(huì)出現(xiàn)三個(gè)樹(shù)視圖:ClassView(類(lèi)視圖)、ResourceView(資源視圖)和FileView(文件視圖),假設(shè)在VC6企業(yè)版中翻開(kāi)了數(shù)據(jù)庫(kù)工程,還會(huì)出現(xiàn)第四個(gè)視圖DataView(數(shù)據(jù)視圖)。好像前面所述,在Workspace窗口的各個(gè)視圖內(nèi)單擊鼠標(biāo)右鍵可以得到很多有用的關(guān)聯(lián)菜單。ClassView顯示當(dāng)前任務(wù)區(qū)中一切工程定義的C+類(lèi)、全局函數(shù)和全局變量,展開(kāi)每一個(gè)類(lèi)后,可以看到該類(lèi)的一切成員函數(shù)和成員變量,假設(shè)雙擊類(lèi)的名字,VC6

40、會(huì)自動(dòng)翻開(kāi)定義這個(gè)類(lèi)的文件,并把文檔窗口定位到該類(lèi)的定義處,假設(shè)雙擊類(lèi)的成員或者全局函數(shù)及變量,文檔窗口那么會(huì)定位到相應(yīng)函數(shù)或變量的定義處。ResourceView顯示每個(gè)工程中定義的各種資源,包括快捷鍵、位圖、對(duì)話(huà)框、圖標(biāo)、菜單、字符串資源、工具欄和版本信息,假設(shè)雙擊一個(gè)資源工程,VC6就會(huì)進(jìn)入資源編輯形狀,翻開(kāi)相應(yīng)的資源,并根據(jù)資源的類(lèi)型自動(dòng)顯示出Graphics、Color、Dialog、Controls等停靠式窗口。FileView顯示了隸屬于每個(gè)工程的一切文件。除了C/C+源文件、頭文件和資源文件外,我們還可以向工程中添加其它類(lèi)型的文件,例如Readme.txt等,這些文件對(duì)工程的編

41、譯銜接不是必需的,但未來(lái)制造安裝程序時(shí)會(huì)被一同打包。同樣,在FileView中雙擊源程序等文本文件時(shí),VC6會(huì)自動(dòng)為該文件翻開(kāi)一個(gè)文檔窗口,雙擊資源文件時(shí),VC6也會(huì)自動(dòng)翻開(kāi)其中包含的資源。在FileView中對(duì)著一個(gè)工程單擊鼠標(biāo)右鍵后,關(guān)聯(lián)菜單中有一個(gè)“Clean命令,在此特別要解釋一下它的功能:VC6在建立(Build)一個(gè)工程時(shí),會(huì)自動(dòng)生成很多中間文件,例如預(yù)編譯頭文件、程序數(shù)據(jù)庫(kù)文件等,這些中間文件加起來(lái)的大小往往有數(shù)兆,很多人在開(kāi)發(fā)一個(gè)軟件期間會(huì)運(yùn)用辦公室或家里的數(shù)臺(tái)機(jī)器,假設(shè)不把這些中間文件刪除,在多臺(tái)機(jī)器之間運(yùn)用軟盤(pán)拷貝工程就很費(fèi)事?!癈lean命令的功能就是把VC6生成的中間文

42、件全部刪除,防止了手工刪除時(shí)能夠會(huì)出現(xiàn)誤刪或漏刪的問(wèn)題。另外,在某些情況下,VC6編譯器能夠無(wú)法正確識(shí)別哪些文件已被編譯過(guò)了,以致于在每次建立工程時(shí)都進(jìn)展完全重建,很浪費(fèi)時(shí)間,此時(shí)運(yùn)用“Clean命令刪除掉中間文件就可以處理這一問(wèn)題。該當(dāng)指出,承載一個(gè)工程的還是存儲(chǔ)在任務(wù)文件夾下的多個(gè)文件(物理上),在Workspace窗口中的這些視圖都是邏輯意義上的,它們只是從不同的角度去自動(dòng)統(tǒng)計(jì)總結(jié)了工程的信息,以方便和協(xié)助 我們查看工程、更有效地開(kāi)展任務(wù)。假設(shè)開(kāi)場(chǎng)時(shí)他不習(xí)慣且工程很簡(jiǎn)單(學(xué)習(xí)期間很多時(shí)候都只需一個(gè).cpp文件),那么他完全沒(méi)有必要去搭理這些視圖,只需求在.cpp文件內(nèi)容窗口中任務(wù)。(2)

43、Output窗口與Workspace窗口一樣,Output窗口也被分成了數(shù)欄,其中前面4欄最常用。在建立工程時(shí),Build欄將顯示工程在建立過(guò)程中經(jīng)過(guò)的每一個(gè)步驟及相應(yīng)信息,假設(shè)出現(xiàn)編譯銜接錯(cuò)誤,那么發(fā)生錯(cuò)誤的文件及行號(hào)、錯(cuò)誤類(lèi)型編號(hào)和描畫(huà)都會(huì)顯示在Build欄中,用鼠標(biāo)雙擊一條編譯錯(cuò)誤,VC6就會(huì)翻開(kāi)相應(yīng)的文件,并自動(dòng)定位到發(fā)生錯(cuò)誤的那一條語(yǔ)句。工程經(jīng)過(guò)編譯銜接后,運(yùn)轉(zhuǎn)其調(diào)試版本,Debug欄中會(huì)顯示出各種調(diào)試信息,包括DLL裝載情況、運(yùn)轉(zhuǎn)時(shí)警告及錯(cuò)誤信息、MFC類(lèi)庫(kù)或程序輸出的調(diào)試信息、進(jìn)程中止代碼等。兩個(gè)Find in Files欄用于顯示從多個(gè)文件中查找字符串后的結(jié)果,當(dāng)他想看看某個(gè)函

44、數(shù)或變量出如今哪些文件中,可以從“Edit菜單中選擇“Find in Files命令,然后指定要查找的字符串、文件類(lèi)型及途徑,按“查找后結(jié)果就會(huì)輸出在Output的Find in Files欄中。(3)窗口規(guī)劃調(diào)整VC6的界面允許用戶(hù)靈敏配置窗口規(guī)劃,例如菜單和工具欄的位置都可以重新定位。讓我們?cè)诓藛位蚬ぞ邫谧蠓筋?lèi)似于把手的兩個(gè)豎條紋處或其它空白處點(diǎn)擊鼠標(biāo)左鍵并按住,然后試試把它拖動(dòng)到窗口的不同地方,就可以發(fā)現(xiàn)菜單和工具欄可以停靠在窗口的上方、左方和下方,雙擊豎條紋后,它們還能以獨(dú)立子窗口的方式出現(xiàn),獨(dú)立子窗口可以一直浮動(dòng)在文檔窗口的上方,并且可以被拖到VC6主窗口之外,假設(shè)有雙顯示器,甚至可

45、以把這些子窗口拖到另外一個(gè)顯示器上,以便進(jìn)一步加大編輯區(qū)域的面積。Workspace和Output等停靠式窗口(Docking View)也能以一樣的方式進(jìn)展拖動(dòng),或者切換成獨(dú)立的子窗口,此外,這些??渴酱翱谶€可以切換成普通的文檔窗口方式,不過(guò)文檔窗口不能被拖出VC6的主窗口,切換的方法是選中某個(gè)??渴酱翱诤?,在“Windows菜單中把“Docking View置于非選中形狀。3 嚴(yán)謹(jǐn)思想,調(diào)試程序3.1 什么時(shí)候需求對(duì)程序進(jìn)展調(diào)試當(dāng)程序編譯出錯(cuò)或者鏈接出錯(cuò)時(shí),系統(tǒng)都將在Output輸出窗口中隨時(shí)顯示出有關(guān)的提示信息或出錯(cuò)警告信息等(假設(shè)是編譯出錯(cuò),只需雙擊Output窗口中的出錯(cuò)信息就可以自

46、動(dòng)跳到出錯(cuò)的程序行,以便仔細(xì)查找)。但假設(shè)編譯和鏈接都正確,而執(zhí)行結(jié)果又總是不正確時(shí),這時(shí)就需求運(yùn)用調(diào)試工具來(lái)幫著“偵查出程序中隱藏著的出錯(cuò)位置(某種邏輯錯(cuò)誤)。強(qiáng)調(diào):初學(xué)者常犯的錯(cuò)誤是以為“編譯和鏈接都正確,程序就應(yīng)該沒(méi)有問(wèn)題,怎樣會(huì)結(jié)果不對(duì)呢?“編譯和鏈接都正確,只能闡明程序沒(méi)有語(yǔ)法和拼寫(xiě)上的錯(cuò)誤,但在算法(邏輯)上有沒(méi)有錯(cuò),還得看結(jié)果對(duì)不對(duì)。反過(guò)來(lái)講,無(wú)論讓他設(shè)計(jì)一個(gè)什么樣的程序,他都只寫(xiě)以下幾行,那么“編譯和鏈接一定都正確,但能實(shí)現(xiàn)設(shè)計(jì)的要求嗎?#include void main()printf(Hello World!n);現(xiàn)實(shí)上,程序設(shè)計(jì)的重點(diǎn)完全不是修正編譯和鏈接過(guò)程中的錯(cuò)誤相

47、對(duì)而言,這種任務(wù)根本沒(méi)有技術(shù)含量,程序設(shè)計(jì)的主要任務(wù)是設(shè)計(jì)正確的算法。3.2 對(duì)程序進(jìn)展調(diào)試的根本手段和方法(1)設(shè)置固定斷點(diǎn)或暫時(shí)斷點(diǎn)所謂斷點(diǎn),是指定程序中的某一行,讓程序運(yùn)轉(zhuǎn)至該行后暫停運(yùn)轉(zhuǎn),使得程序員可以察看分析程序的運(yùn)轉(zhuǎn)過(guò)程中的情況。這些情況普通包括:在變量窗口(Varibles)中察看程序中變量的當(dāng)前值。程序員察看這些值的目的是與預(yù)期值對(duì)比,假設(shè)與預(yù)期值不一致,那么此斷點(diǎn)前運(yùn)轉(zhuǎn)的程序一定在某個(gè)地方有問(wèn)題,以此可減少缺點(diǎn)范圍。例如以下程序是計(jì)算cos(x)并顯示,運(yùn)轉(zhuǎn)時(shí)發(fā)現(xiàn)無(wú)論x輸入為多少,結(jié)果都是0.046414。#include #include void main()int x;

48、printf(Please input x:);scanf(% d, &x);printf(cos(x)=%fn, cos(x);在該程序中,假設(shè)他沒(méi)有看到問(wèn)題程序較長(zhǎng)、較復(fù)雜時(shí)很難看出問(wèn)題所在,那么應(yīng)該運(yùn)用調(diào)試手段定位缺點(diǎn)位置。在監(jiān)控窗口(Watch)中察看指定變量或表達(dá)式的值。當(dāng)變量較多時(shí),運(yùn)用Varibles窗口能夠不太方便,運(yùn)用Watch窗口那么可以有目的、有方案地察看關(guān)鍵變量的變化。在輸出窗口中察看程序當(dāng)前的輸出與預(yù)期能否一致。同樣地,假設(shè)不一致,那么此斷點(diǎn)前運(yùn)轉(zhuǎn)的程序一定在某個(gè)地方有問(wèn)題。在內(nèi)存窗口(Memory)中察看內(nèi)存中數(shù)據(jù)的變化。在該窗口中能直接查詢(xún)和修正恣意地址的數(shù)據(jù)。對(duì)

49、初學(xué)者來(lái)說(shuō),經(jīng)過(guò)它能更深化地了解各種變量、數(shù)組和構(gòu)造等是如何占用內(nèi)存的,以及數(shù)組越界的過(guò)程。在調(diào)用堆棧窗口(Call Stack)中察看函數(shù)調(diào)用的嵌套情況。此窗口在函數(shù)調(diào)用關(guān)系比較復(fù)雜或遞歸調(diào)用的情況下,對(duì)分析缺點(diǎn)很有協(xié)助 。(2)單步執(zhí)行程序讓程序被一步一步(行)地執(zhí)行,察看分析執(zhí)行過(guò)程能否符合預(yù)要求。例如,以下程序預(yù)期的功能是從鍵盤(pán)上讀入兩個(gè)數(shù)(x和y),判別x和y能否相等,相等那么在屏幕上顯示x=y,不相等那么顯示xy。這是要?jiǎng)?wù)虛現(xiàn)的功能,但程序?qū)嵺`的運(yùn)轉(zhuǎn)情況卻是:無(wú)論輸入什么,都會(huì)在屏幕上顯示x=y和xy,程序一定有問(wèn)題,但外表上看卻能夠找不到問(wèn)題所在,運(yùn)用單步執(zhí)行,那么能定位缺點(diǎn)點(diǎn),

50、減少看的范圍。例如,在單步執(zhí)行的過(guò)程中,假設(shè)輸入“2,3,發(fā)現(xiàn)x和y的值確實(shí)變成了2和3,此時(shí)按道理不應(yīng)執(zhí)行“printf(x=yn);,但單步跟蹤卻發(fā)現(xiàn)被執(zhí)行了,因此多半問(wèn)題出在“if (x = y)。#include void main()int x, y;printf(Please input x, y:);scanf(%d,%d, &x, &y);if (x = y)printf(x=yn);else;printf(xyn);在單步執(zhí)行的過(guò)程中,應(yīng)靈敏運(yùn)用Step Over、Step Into、Step Out、Run to Cursor等方法,提高伐試效率。建議在程序調(diào)試過(guò)程中,記住

51、并運(yùn)用“Step Over、Step Into、Step Out、Run to Cursor等菜單項(xiàng)的快捷鍵,開(kāi)場(chǎng)時(shí)能夠較陌生、操作較慢,但堅(jiān)持一段時(shí)間就能生巧、效率提高。(3)運(yùn)用斷言斷言是對(duì)某種假設(shè)條件進(jìn)展檢查(可了解為假設(shè)條件成立那么無(wú)動(dòng)作,否那么應(yīng)報(bào)告),它可以快速發(fā)現(xiàn)并定位軟件問(wèn)題,同時(shí)對(duì)系統(tǒng)錯(cuò)誤進(jìn)展自動(dòng)報(bào)警。斷言可以對(duì)在系統(tǒng)中隱藏很深,用其它手段極難發(fā)現(xiàn)的問(wèn)題進(jìn)展定位,從而縮短軟件問(wèn)題定位時(shí)間,提高系統(tǒng)的可測(cè)性。實(shí)踐運(yùn)用時(shí),可根據(jù)詳細(xì)情況靈敏地設(shè)計(jì)斷言。運(yùn)用斷言時(shí),必需在程序的開(kāi)頭加上:#include 可用斷言來(lái)確認(rèn)函數(shù)的參數(shù)。例如:假設(shè)某函數(shù)參數(shù)中有一個(gè)指針,那么運(yùn)用指針前可對(duì)

52、它檢查,以防止其他人調(diào)用本函數(shù)時(shí)運(yùn)用空指針作參數(shù)。代碼如下:int exam_fun( unsigned char *str ) assert(str != NULL); / 斷言“指針不為空,假設(shè)“空(斷言不成立)那么報(bào)錯(cuò) . /other program code可用斷言來(lái)確認(rèn)能否發(fā)生了不該發(fā)生的情況。例如:以下程序段運(yùn)轉(zhuǎn)結(jié)果有錯(cuò),檢查起來(lái)很困難而且搞了很久都不知是什么地方有問(wèn)題。因此,建議分析程序的正常運(yùn)轉(zhuǎn)情況應(yīng)該是什么,運(yùn)轉(zhuǎn)過(guò)程中能否出了異常,針對(duì)一切(或關(guān)鍵形狀)該當(dāng)正常的情況,運(yùn)用斷言,就很有能夠發(fā)現(xiàn)異常緣由,且調(diào)試效率很高。針對(duì)該程序段,我們斷言(斷定)變量i的取值應(yīng)該為“i=0

53、 & iSIZE且較關(guān)鍵,但在運(yùn)轉(zhuǎn)過(guò)程中能否有能夠被無(wú)意修正(例如其它變量越界)而超出范圍呢,就可運(yùn)用斷言檢查能否發(fā)生了這樣的情況。for (i=0; i=0 & iSIZE); / 斷言“i的正常取值范圍,假設(shè)斷言不成立那么報(bào)錯(cuò)arrayi = i; . /other program code斷言不成立時(shí)(一出現(xiàn)異常),系統(tǒng)將立刻報(bào)錯(cuò),此時(shí)可進(jìn)入程序調(diào)試形狀,檢查程序的運(yùn)轉(zhuǎn)情況。3.3 對(duì)一個(gè)簡(jiǎn)單程序的調(diào)試過(guò)程假設(shè)預(yù)備編制進(jìn)展如下計(jì)算義務(wù)的一個(gè)簡(jiǎn)單程序:在知x=3、y=5的情況下,先計(jì)算出x與y的和s,差d,商q,模r,而后計(jì)算res=s+2d+3q+4r的值(res應(yīng)該等于16)并顯示在屏

54、幕上。但編制的如下程序運(yùn)轉(zhuǎn)后卻得出了一個(gè)錯(cuò)誤結(jié)果“res=26。#include void main()int x=3, y=5;int s, d, q, r, res;s = x + y;d = s - y;q = x / y;r = x % y;res = s + 2*d + 3*q + 4*r;printf(res=%dn, res);圖3-1 程序dbgTest.cpp的跟蹤調(diào)試分析上述所編制的程序行,假設(shè)能在要輸出res結(jié)果值的那一程序行(倒數(shù)第二行)處設(shè)置一個(gè)暫時(shí)斷點(diǎn),讓程序先執(zhí)行到此斷點(diǎn)處(留意設(shè)為斷點(diǎn)的那一行尚未被執(zhí)行!),看一看那時(shí)各變量的動(dòng)態(tài)取值情況,有能夠就會(huì)找到出錯(cuò)的緣

55、由!基于上述分析,先將鼠標(biāo)光標(biāo)挪動(dòng)到“printf(res=%dn, res);那一行處(左鍵單擊那一行恣意位置),從而指定了暫時(shí)性斷點(diǎn)的行位置,而后執(zhí)行“BuildStart DebugRun to Cursor選項(xiàng),使程序運(yùn)轉(zhuǎn)到所指定行時(shí)暫停其執(zhí)行,并顯示出如圖3-1的界面,其中的左下方窗口中就列出了當(dāng)時(shí)各變量的取值情況:和s=8,差d=3(x=3,y=5,它們的差d=3一定是錯(cuò)誤的!),商q=0,模r=3,最終結(jié)果res=26。再仔細(xì)查看程序中擔(dān)任計(jì)算差d的那一個(gè)語(yǔ)句“d=s-y;就會(huì)恍然大悟,原來(lái)將“x-y誤寫(xiě)成了“s-y!找到了錯(cuò)誤,此時(shí)可以經(jīng)過(guò)菜單項(xiàng)選擇項(xiàng)“DebugStop De

56、bugging,中斷當(dāng)前的調(diào)試過(guò)程并前往正常的編輯形狀,修正所發(fā)現(xiàn)的錯(cuò)誤后,再一次執(zhí)行將能得出正確結(jié)果“res=16。順便指出,圖3-1中顯示的變量是“自動(dòng)查看方式的,即VC6自動(dòng)顯示當(dāng)前運(yùn)轉(zhuǎn)上下文中的變量的值。假設(shè)變量比較多,自動(dòng)顯示的窗口比較混亂,那么可以在 Watch 列表中添加本人想要監(jiān)控的變量名。上述設(shè)置暫時(shí)斷點(diǎn)(到鼠標(biāo)光標(biāo)那一行處)的調(diào)試手段運(yùn)用起來(lái)很方便,會(huì)經(jīng)常運(yùn)用(也經(jīng)常在到達(dá)一個(gè)斷點(diǎn)后,又設(shè)置另一個(gè)新的暫時(shí)斷點(diǎn))。另外也常配合運(yùn)用“單步執(zhí)行的方式,來(lái)仔細(xì)檢查每一步(一個(gè)程序行)執(zhí)行后各變量取值的動(dòng)態(tài)變化情況,如,先經(jīng)過(guò)“Run to Cursor執(zhí)行到某一個(gè)鼠標(biāo)光標(biāo)暫時(shí)斷點(diǎn)行

57、處,而后經(jīng)過(guò)運(yùn)用Debug菜單的“Step Over或“Step Into來(lái)進(jìn)展所謂的“單步執(zhí)行,當(dāng)然,每執(zhí)行一步后,都要仔細(xì)察看并分析系統(tǒng)自動(dòng)給出的各變量取值的動(dòng)態(tài)變化情況,以便及時(shí)發(fā)現(xiàn)異常而找到出錯(cuò)緣由。3.4 設(shè)計(jì)適宜的程序調(diào)試方案讓我們來(lái)分析并設(shè)計(jì)對(duì)如下程序進(jìn)展調(diào)試的詳細(xì)方法與手段(實(shí)踐上,對(duì)不同的程序,都需求在分析其執(zhí)行結(jié)果以及其程序編寫(xiě)構(gòu)造的根底上,來(lái)設(shè)計(jì)相應(yīng)的對(duì)其進(jìn)展詳細(xì)調(diào)試的方法與手段,目的是想方設(shè)法逐漸減少“偵查范圍,直到最后找到出錯(cuò)位置)。該程序除main外,還有一個(gè)自定義函數(shù)f。假設(shè)曾經(jīng)能確認(rèn)調(diào)用f函數(shù)前計(jì)算出的res值(或s、d、q或r其中之一的結(jié)果值)不正確的話(huà),那么

58、可像上一程序那樣,在計(jì)算出res變量值的下一行(或在靠前一些的某一行)處設(shè)置斷點(diǎn),看到達(dá)那一斷點(diǎn)處能否一切正常。假設(shè)到達(dá)斷點(diǎn)處的數(shù)據(jù)結(jié)果曾經(jīng)不正常的話(huà),錯(cuò)誤曾經(jīng)出現(xiàn)(出如今跟前或出如今前面,從而找到了錯(cuò)誤或者減少了“偵查范圍);假設(shè)斷點(diǎn)處依然正常,可斷言錯(cuò)誤出如今后面,而后,一:可又一次經(jīng)過(guò)鼠標(biāo)光標(biāo)往更靠后一些的適當(dāng)位置設(shè)置新斷點(diǎn),再一次“DebugRun to Cursor(一下向后“邁過(guò)了許多行,再繼續(xù)“偵查!);二:經(jīng)過(guò)“單步執(zhí)行(DebugStepOver),在重點(diǎn)疑心的那一塊地方仔細(xì)地逐行進(jìn)展“偵查。留意,“Step Over不會(huì)“跟蹤進(jìn)入f函數(shù)內(nèi)部,假設(shè)疑心f函數(shù)能夠有問(wèn)題的話(huà),要

59、經(jīng)過(guò)運(yùn)用“DebugStep Into進(jìn)入f內(nèi)部再進(jìn)展細(xì)致調(diào)試(在不遇到函數(shù)調(diào)用的地方,“Step Over與“Step Into的功能是一樣的。假設(shè)經(jīng)過(guò)“Step Into進(jìn)入到函數(shù)內(nèi)部,單步執(zhí)行假設(shè)干步之后,假設(shè)發(fā)現(xiàn)不再需求進(jìn)展單步伐試的話(huà),可經(jīng)過(guò)“Step Out從函數(shù)內(nèi)部前往到調(diào)用語(yǔ)句的下一語(yǔ)句處)。作為練習(xí),請(qǐng)讀者利用這一程序?qū)ι鲜龅恼{(diào)試方法與手段進(jìn)展多方面的靈敏運(yùn)用與體驗(yàn)!可以看出,程序調(diào)試是一件很費(fèi)時(shí)費(fèi)力而又非常細(xì)致的任務(wù),需求耐心,要經(jīng)過(guò)不斷的實(shí)際來(lái)總結(jié)與積累調(diào)試閱歷。至于VC6提供的其他調(diào)試方法與手段,這兒就不一一引見(jiàn)了。#include int f(int a)int b,

60、 c;b = a + 5;c = 2*b + 100;return c;void main()int x=3, y=5;int s, d, q, r, res, z;s = x + y;d = x - y;q = x / y;r = x % y;res = s + 2*d + 3*q + 4*r;printf(res=%dn, res);z = f(36);printf(z=%dn, z);前面也提到過(guò),經(jīng)過(guò)“Run to Cursor所設(shè)置并到達(dá)的斷點(diǎn)是一個(gè)暫時(shí)性的斷點(diǎn)。實(shí)踐上,VC6還提供設(shè)置與去除固定性斷點(diǎn)的方法。設(shè)置固定性斷點(diǎn)最簡(jiǎn)單的方法是:在某一程序行處,單擊鼠標(biāo)右鍵,在菜單中選擇“

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論