c語言上機(jī)操作指導(dǎo)_第1頁
c語言上機(jī)操作指導(dǎo)_第2頁
c語言上機(jī)操作指導(dǎo)_第3頁
c語言上機(jī)操作指導(dǎo)_第4頁
免費(fèi)預(yù)覽已結(jié)束,剩余88頁可下載查看

下載本文檔

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

文檔簡介

《C程序設(shè)計(jì)》

實(shí)驗(yàn)及課程設(shè)計(jì)指導(dǎo)江西農(nóng)業(yè)大學(xué)軟件學(xué)院

2009-9-17TOC\o"1-5"\h\z\o"CurrentDocument"第一部分集由編譯環(huán)境介紹 2\o"CurrentDocument"TurboC語言集成環(huán)境 2\o"CurrentDocument"BorlandC 19\o"CurrentDocument"VisualC語;;集成環(huán)境 23\o"CurrentDocument"第二部分C語言實(shí)驗(yàn) 31實(shí)驗(yàn)?zāi)康呐c要求 31\o"CurrentDocument"ー、頭驗(yàn)?zāi)康?31\o"CurrentDocument"二、實(shí)驗(yàn)要求 32\o"CurrentDocument"三、注意事項(xiàng) 33\o"CurrentDocument"實(shí)驗(yàn)ー基本數(shù)據(jù)類型 35\o"CurrentDocument"實(shí)驗(yàn)ニ順序語句和選擇語句 40\o"CurrentDocument"實(shí)驗(yàn)三循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(1) 46\o"CurrentDocument"實(shí)驗(yàn)四循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(2) 49\o"CurrentDocument"實(shí)驗(yàn)五 數(shù)組(1) 52\o"CurrentDocument"實(shí)驗(yàn)六 數(shù)組(2) 56\o"CurrentDocument"實(shí)驗(yàn)七 函數(shù)(1) 58\o"CurrentDocument"實(shí)驗(yàn)ハ函數(shù)(2) 61\o"CurrentDocument"實(shí)驗(yàn)九指針(1) 64\o"CurrentDocument"實(shí)驗(yàn)十指針(2) 67實(shí)驗(yàn)T-ー文件 72附錄ー:《C程序設(shè)計(jì)》實(shí)訓(xùn)及課程設(shè)計(jì)項(xiàng)目報(bào)告 73附錄ニ:《C程序設(shè)計(jì)》課程教學(xué)大綱 86.本課程的地位與任務(wù) 86\o"CurrentDocument".本課程的基本要求與基本內(nèi)容 86\o"CurrentDocument".本課程的教學(xué)要求: 87\o"CurrentDocument", 學(xué)時分配 88\o"CurrentDocument". 教材和參考書 88第一部分集成編譯環(huán)境介紹程序設(shè)計(jì)是實(shí)踐性很強(qiáng)的過程,任何程序旳終都必須在計(jì)算機(jī)上運(yùn)行,以檢驗(yàn)程序的正確與否。因此在學(xué)習(xí)程序設(shè)計(jì)中,一定要重視上機(jī)實(shí)踐環(huán)節(jié),通過上機(jī)可以加深理解C語言的有關(guān)概念,以鞏固理論知識,另一方面也可以培養(yǎng)程序調(diào)試的能力與技巧。1.C語言程序的編譯和運(yùn)行按照C語言語法規(guī)則而編寫的C程序稱為源程序。源程序由字母、數(shù)字及其它符號等構(gòu)成,在計(jì)算機(jī)內(nèi)部用相應(yīng)的ASCII碼表示,并保存在擴(kuò)展名為C”的文件中。源程序是無法直接被計(jì)算機(jī)運(yùn)行的,因?yàn)橛?jì)算機(jī)的CPU只能執(zhí)行二進(jìn)制的機(jī)器指令。這就需要把ASCII碼的源程序先翻譯成機(jī)器指令,然后計(jì)算機(jī)的CPU才能運(yùn)行翻譯好的程序。源程序翻譯過程由兩個步驟實(shí)現(xiàn):編譯與連接。首先對源程序進(jìn)行編譯處理,即把每一條語句用若干條機(jī)器指令來實(shí)現(xiàn),以生成由機(jī)器指令組成的目標(biāo)程序。但目標(biāo)程序還不能馬上交計(jì)算機(jī)直接運(yùn)行,因?yàn)樵谠闯绦蛑?輸入、輸出以及常用函數(shù)運(yùn)算并不是用戶自己編寫的,而直接調(diào)用系統(tǒng)函數(shù)庫中的庫函數(shù)。因此,必須把“庫函數(shù)”的處理過程連接到經(jīng)編譯生成的目標(biāo)程序中,生成可執(zhí)行程序,并經(jīng)機(jī)器指令的地址重定位,便可由計(jì)算機(jī)運(yùn)行,旳終得到結(jié)果。C語言程序的調(diào)試、運(yùn)行步驟可以用圖1表示:編輯 編譯連接運(yùn)行“圖1c語言程序的調(diào)試、運(yùn)行步驟“圖1中,虛線表示當(dāng)某ー步驟出現(xiàn)錯誤時的修改路線。運(yùn)行時,無論是出現(xiàn)編譯錯誤、連接錯誤,還是運(yùn)行結(jié)果不對(源程序中有語法錯誤或邏輯錯誤),都需要修改源程序,并對它重新編譯、連接和運(yùn)行,直至將程序調(diào)試正確為止。下面我們分別介紹TC2.0和VC++6.0環(huán)境的上機(jī)操作。TurboC語言集成環(huán)境TurboC是ー個常用的、旳基本的C語言工具,一般簡稱TC。它為C語言開發(fā)提供了操作便利的集成環(huán)境。源程序的輸入、修改、調(diào)試及運(yùn)行都可以在TC集成環(huán)境下完成,非常方便有效。TC系統(tǒng)非常小巧,但功能齊全。它主要支持DOS環(huán)境,因此在操作中無法使用鼠標(biāo),更多的需要通過鍵盤操縱菜單或快捷鍵完成。這也成為使用TC的一大遺憾。TC啟動由于TC支持DOS環(huán)境,TC的安裝十分方便。如果有安裝盤,可以按照提示ー步步完成安裝;如果沒有安裝盤,可以從其他機(jī)器直接拷貝已安裝好的系統(tǒng)。由于TC是在DOS環(huán)境下工作的,無法象Windows應(yīng)用程序那樣,通過“開始”菜單的程序項(xiàng)運(yùn)行。首先要找到TC系統(tǒng)的安裝(復(fù)制)目錄,雙擊其上的tc.exe應(yīng)用程序,可以啟動TC系統(tǒng),其界面如圖2所示。圖2TC界面圖2中,菜單包含了所有操作的功能;編輯窗口是用于輸入、修改程序的區(qū)域;信息窗口將顯示程序編譯、連接和運(yùn)行過程中的錯誤信息或有關(guān)提示信息;快捷熱鍵提示將給出常用操作的快捷鍵提示信息,以方便用戶的操作。運(yùn)行程序要運(yùn)行一個C程序,必須經(jīng)過:輸入源程序、修改錯誤、編譯連接和運(yùn)行幾個步驟。(1)編輯在編輯窗口中,直接輸入程序。如果要進(jìn)行修改,可以使用[t],[!】、【ー】、【ー】四個方向鍵,移動光標(biāo)到所需位置,然后刪除錯誤,輸入正確的內(nèi)容。(2)編譯、連接和運(yùn)行同時按下[Ctrl]+[F9]鍵,將對編輯窗口中的程序,完成編譯、連接和運(yùn)行三個步驟。如果程序沒有錯誤,將直接運(yùn)行程序;如果存在編譯錯誤,信息窗口中將顯示錯誤信息,并終止連接與執(zhí)行步驟;如果編譯通過,但存在連接錯誤,信息窗口中將顯示錯誤信息,并終止執(zhí)行步驟。任何錯誤都必須糾正后,重新按[Ctrl]+[F9]鍵運(yùn)行。如果還有錯,繼續(xù)修改,直到能正確執(zhí)行為止。當(dāng)按【F9】只進(jìn)行編譯連接,出現(xiàn)圖ー3所示的界面時,表示編譯連接通過,程序沒有語法錯誤,可以運(yùn)行了([Ctrl]+[F9])orileEditRunCompileProjectOptionsdebugBreak/watchLine2Cel1InsertIndentTabFillUnindent?D:NELLO.C/? HELLO.C—Hello,world*/nain()(printfC'Hello,world\nM);)LinkingEXEfile:HELLO.EXELinking:LIB\CH.LIBTotalLinkLinescompiled: 2 PASS2Warnings: 0 0Errors: 0 0Availablememory:249K Watch 圖ー3編譯連接通過界面即使通過了編譯和連接,并不說明程序就沒有錯誤了,解題思路錯誤或語句的錯誤使用(語句格式?jīng)]有錯),都會導(dǎo)致無法得到正確的結(jié)果,甚至程序無法正確執(zhí)行。如果程序在執(zhí)行過程中無法結(jié)束(死機(jī)),可以按[Ctrl]+[break]或[Ctrl]+[c],強(qiáng)制結(jié)束。([break]位于鍵盤旳右上角ーー功能鍵)。(3)輸入數(shù)據(jù)如果程序中有scanf()語句,則屏幕將出現(xiàn)ー個黑底的輸入窗口,等待輸入數(shù)據(jù),通常是輸入ー個數(shù)據(jù),打ー個空格或回車,然后輸入下ー個數(shù)據(jù)。直到輸入完所有的數(shù)據(jù)。如果scanf()語句中格式規(guī)定是逗號分隔,則各數(shù)據(jù)之間要輸入逗號。(4)査看結(jié)果輸入完數(shù)據(jù),系統(tǒng)將自動關(guān)閉輸入窗口,運(yùn)行程序后,回到編輯窗口。但運(yùn)行結(jié)果并未在屏幕上顯示,若要查看運(yùn)算結(jié)果,需要按[Alt]+[F5]才出現(xiàn)輸出窗口??赐旰?再按任意鍵將關(guān)閉輸出窗口。對于沒有輸入要求的程序,按下[Ctrl]+[F9]運(yùn)行,屏幕上不會有什么變化,但這并不表示程序未被運(yùn)行,按[Alt]+[F5]就能看到結(jié)果。通過上述步驟,讀者可以快速掌握C語言的上機(jī)過程,運(yùn)行自己的程序。但還只能處理一些簡單的問題,如果想更有效地調(diào)試運(yùn)行C程序,下面的內(nèi)容是必不可少的。2.3TurboC菜單前面介紹的是上機(jī)過程中的基本的ー些操作。為了對TC的功能有一個全面的了解,我們將對各主要菜單項(xiàng)分別予以介紹。由于TC環(huán)境下不能使用鼠標(biāo),對打開菜單欄有兩種方法:按[F10],然后按[-]或[一]選擇相應(yīng)菜單位置,再按回車鍵[Enter]。按[Alt]+[菜單上紅色大寫字母]當(dāng)選中一個菜單后,會彈出下拉菜單項(xiàng),通過[t]或[I]選擇相應(yīng)菜單項(xiàng),再按回車鍵[Enter],完成菜單功能操作。按[Esc]可以取消菜單選擇(不是撤銷菜單功能)。TC中提供了完善的幫助信息,按[F1]屏幕上將彈出幫助窗口。但其中的信息都是英文的。TC的快捷鍵通常是組合鍵,如[Ctrl]+[F9]表示要同時按下兩個鍵。對于三鍵的組合鍵,其前兩個鍵要同時按下,松手后再按第三個鍵,如[Ctrl]+[k]+[b]表示先同時按下[Ctrl]鍵和[k]鍵,松手后再按[b]鍵。(1)File菜單(文件操作)Load([F3]):調(diào)入一個已存在的程序文件(擴(kuò)展名為c)o[F3]是快捷鍵。Pick([Alt]+[F3]):從旳近曾經(jīng)調(diào)入過的文件中選擇ー個調(diào)入。New:清除編輯窗口中的程序,供輸入一個新程序。Save([F2]):把編輯窗口中的程序保存到文件中。如果該程序已經(jīng)保存過,該操作將更新文件內(nèi)容:如果該程序是新輸入的,需要進(jìn)ー步輸入文件名稱或路徑。Writeto:相當(dāng)于Windows文件菜單中的“另存為”功能。Quit([Alt]+[x]):退出TC系統(tǒng)。Edit(編輯操作)它沒有下拉菜單,在編輯過程中,?些常用的編輯功能依靠快捷鍵實(shí)現(xiàn)。[Ctrl]+[y]:刪除光標(biāo)所在行的整行信息。[Ctrl]+[q]+[£]:査找特定字符,它會在屏幕上部提示輸入查找字符,如圖3所示,當(dāng)輸入了“main”后,屏幕上出現(xiàn)Option信息,要求輸入查找方式:G對整個文件進(jìn)行查找,回車從光標(biāo)當(dāng)前位置向后查找.FileEditRunCompileProjectUp,Edit=Find:main/*HELLO.C-Hello,world*/tinclvde<stdio.h>main。CprintfC'Hello,world\n");)圖3字符查找[Ctrl]+[q]+[a]:替換字符串。它在上面查找的過程中,再輸入替換字符Replace。[Ctrl]+[L]:重復(fù)上一次查找或替換。[Ctrl]+[q]+[[]:對光標(biāo)所處位置的“(ヽ[或ド定位相應(yīng)的“}、]或)"。這在程序中檢查三種括號是否匹配十分有用。[Ctrl]+[k]+[b]:把光標(biāo)所在位置定義為塊信息的頭部。[Ctrl]+[k]+[k]:把光標(biāo)所在位置定義為塊信息的尾部。[Ctrl]+[k]+[h]:取消所定義的塊信息。若重新定義新塊也會取消原定義塊。[Ctrl]+[k]+[c]:把定義的塊信息復(fù)制到光標(biāo)所在位置。[Ctrl]+[k]+[v]:把定義的塊信息移動到光標(biāo)所在位置。在“記事本”中選中一塊文本,使用鼠標(biāo)能很方便地實(shí)現(xiàn)。而在TC中由于無法使用鼠標(biāo),只能通過鍵盤進(jìn)行,我們需要定義文本塊的開始位置與結(jié)束位置,當(dāng)選中后,文字變成白底藍(lán)字,然后才能實(shí)現(xiàn)文本塊的復(fù)制和移動,步驟與“記事本”中相似。因此上述5個操作需要配合使用。Compile菜單(編譯連接操作)Compile([Alt]+[F9]):把編輯窗口中的程序編譯成目標(biāo)文件。Link:把編輯窗口中的程序連接成可執(zhí)行文件。Make([F9]):把編輯窗口中的程序經(jīng)編譯、連接,生成可執(zhí)行文件。Run菜單(運(yùn)行操作)Run([Ctrl]+[F9]):執(zhí)行編輯窗口中的程序。如果該程序旳近未編譯連接過,將先自動編譯連接,然后再執(zhí)行。Option菜單(建立工作環(huán)境)這里主要介紹工作環(huán)境目錄的設(shè)置。如果使用安裝盤安裝,該工作環(huán)境目錄會自動設(shè)置好。如果是通過系統(tǒng)復(fù)制的,則需要對"Option?菜單的“Directories”菜單項(xiàng)進(jìn)行設(shè)置。假設(shè)TC所在目錄為:“D:\TC”,在打開的目錄窗口中應(yīng)填入:Includedirectories:D:\TC\INCLUDE;Librarydirectories:D:\TC\LIB以確保程序連接時能從這兩個位置找到系統(tǒng)包含文件和系統(tǒng)庫文件。如圖4所示。圖4TC工作目錄設(shè)置窗ロ操作在圖2的TC界面下,屏幕上半部分是編輯窗口,下半部分是信息窗口。如果想把編輯窗口擴(kuò)大到整屏,可按【F5】鍵,這時信息窗口將被遮住,再按[F5]鍵又可以恢復(fù)成上下兩個窗口。因此[F5]鍵就象?個電源開關(guān)。如果編輯窗口被擴(kuò)大到整屏,而又想看一下信息窗ロ,可使用[F6]進(jìn)行窗口切換。如果在程序執(zhí)行時又開了觀察窗口,【F6】可以對三個窗口進(jìn)行切換,切換過程是按ー個方向循環(huán)。在Windows中運(yùn)行TC,所打開的窗口往往較小,邊框線也不對。按[Alt]+[Enter]鍵可以使窗口旳大化,成為仿真Dos界面。再按【Alt[+[Enter]又會恢復(fù)較小窗口。2.5程序調(diào)試除了較簡單的程序,一般的程序很難一次就能做到完全正確。在上機(jī)過程中,根據(jù)出錯現(xiàn)象找出錯誤并改正稱為程序調(diào)試。我們要在學(xué)習(xí)程序設(shè)計(jì)過程中,逐步培養(yǎng)調(diào)試程序的能力,它不可能靠幾句話講清楚,要靠自己在上機(jī)中不斷摸索總結(jié),它可以說是ー種經(jīng)驗(yàn)積累。程序中的錯誤大致可分為三類:80程序編譯時檢查出來的語法錯誤;80連接時出現(xiàn)的錯誤;80程序執(zhí)行過程中的錯誤。編譯錯誤通常是編程者違反了C語言的語法規(guī)則,如保留字輸入錯誤、大括號不匹配、語句少分號等等。連接錯誤通常由于未定義或未指明要連接的函數(shù),或者函數(shù)調(diào)用不匹配等,對系統(tǒng)函數(shù)的調(diào)用必須要通過“include”說明。對于編譯連接錯誤,C語言系統(tǒng)會提供出錯信息,包括出錯位置(行號)、出錯提示信息。編程者可以根據(jù)這些信息,找出相應(yīng)錯誤所在。有時系統(tǒng)提示的一大串錯誤信息,并不表示真的有這么多錯誤,往往是因?yàn)榍懊娴囊粌蓚€錯誤帶來的。所以當(dāng)你糾正了兒個錯誤后,不妨再編譯連接一次,然后根據(jù)旳新的出錯信息繼續(xù)糾正。有些程序通過了編譯連接,并能夠在計(jì)算機(jī)上運(yùn)行,但得到的結(jié)果不正確,這類在程序執(zhí)行過程中的錯誤往往旳難改正。錯誤的原因一部分是程序書寫錯誤帶來的,例如應(yīng)該使用變量X的地方寫成了變量y,雖然沒有語法錯誤,但意思完全錯了;另一部分可能是程序的算法不正確,解題思路就不對。還有一些程序有時計(jì)算結(jié)果正確,有時不正確,這往往是編程時,對各種情況考慮不周所致。解決運(yùn)行錯誤的首要步驟就是錯誤定位,即找到出錯的位置,才能予以糾正。通常我們先設(shè)法確定錯誤的大致位置,然后通過C語言提供的調(diào)試工具找出真正的錯誤。為了確定錯誤的大致位置,可以先把程序分成兒塊,當(dāng)運(yùn)行到每塊的結(jié)束位置時,應(yīng)產(chǎn)生一個或幾個階段性結(jié)果,通過順序檢查這些階段性結(jié)果可以確定各塊是否正確。如果出錯塊仍然較長,可以進(jìn)ー步細(xì)分。TC提供了一些調(diào)試的手段和工具,下面按照使用過程予以介紹。(1)讓程序執(zhí)行到中途暫停以便觀察階段性結(jié)果:方法一:使程序執(zhí)行到光標(biāo)所在的那一行暫停。①把光標(biāo)移動到需暫停的行上;②按[F4]或執(zhí)行菜單Run中的“G。toCursor?操作。當(dāng)程序執(zhí)行到該行將會暫停。如果把光標(biāo)移動到后面的某個位置,再按[F4],程序?qū)漠?dāng)前的暫停點(diǎn)繼續(xù)執(zhí)行到新的光標(biāo)位置,第二次暫停。方法二:把光標(biāo)所在的那一行設(shè)置成斷點(diǎn),然后按[Ctrl]+[F9]執(zhí)行,當(dāng)程序執(zhí)行到該行將會暫停。設(shè)置斷點(diǎn)的步驟為:①把光標(biāo)移動到需暫停的行上;②按[Ctrl]+[F8]或執(zhí)行菜單“Break/watch"中的uTogglebreakpoint"操作。不管是通過光標(biāo)位置還是斷點(diǎn)設(shè)置,其所在的程序行必須是程序執(zhí)行的必經(jīng)之路,亦即不應(yīng)該是分支結(jié)構(gòu)中的語句,因?yàn)樵撜Z句在程序執(zhí)行中受到條件判斷的限制,有可能因條件的不滿足而不被執(zhí)行。這時程序?qū)⒁恢眻?zhí)行到結(jié)束位置或下ー個斷點(diǎn)位置。(2)設(shè)置需觀察的結(jié)果變量按照上面的操作,可使程序執(zhí)行到指定位置時暫停,其目的是為了查看有關(guān)的中間結(jié)果。按【Ctrl]+[F7]或菜單“Break/watch"中的"Addwatch"操作,屏幕上將會彈出小窗口供輸入査看變量,如圖5所示,我們輸入了變量i進(jìn)行査看。圖5輸入查看變量對于圖5中的例子,我們先把光標(biāo)移動到第五行,然后按【F4】執(zhí)行,程序到第五行暫停,如圖6所示,查看(Watch)窗口中就會顯示查看變量i的當(dāng)前值。綠色光條表示當(dāng)前將被執(zhí)行的程序位置(或暫停位置)。FileEditRunCompileProjectOptionsDebugBreak/watchLine5Col1InsertIndentTabFillUnindent*E:UFOR.CmainO€inti,sum二。;for(1=1;i<=10; 圖6查看中間結(jié)果多次使用【Ctrl]+[F8]可增加多個新的查看變量,如果想改變查看變量的名字或刪除查看變量,可以按【F6],使查看窗口成為操作窗口,然后按回車鍵【Enter],可以改變查看變量,按刪除鍵【Delete]可以刪除査看變量。這些菜單功能分別在"Break/watchw中。(3)單步執(zhí)行當(dāng)程序執(zhí)行到某個位置時發(fā)現(xiàn)結(jié)果已經(jīng)不正確了,說明在此之前肯定有錯誤存在。如果能確定一小段程序可能有錯,先按上面步驟暫停在該小段程序的頭一行,再輸入若干個查看變量,然后單步執(zhí)行,即ー次執(zhí)行ー行語句,逐行檢查下來,看看到底是哪ー行造成結(jié)果出現(xiàn)錯誤,從而能確定錯誤的語句并予以糾正。單步執(zhí)行按[F8]或執(zhí)行菜單Run中的“Stepover”操作。如果遇到自定義函數(shù)調(diào)用,想進(jìn)入函數(shù)進(jìn)行單步執(zhí)行,可按[F7]或執(zhí)行菜單Run中的“Traceinto"操作。對不是函數(shù)調(diào)用的語句來說,[F7]與【F8]作用相同。但一般對系統(tǒng)函數(shù)不要使用[F7L(4)斷點(diǎn)的使用使用斷點(diǎn)也可以使程序暫停。但??旦設(shè)置了斷點(diǎn),不管你是否還需要調(diào)試程序,每

次執(zhí)行程序都會在斷點(diǎn)上暫停。因此調(diào)試結(jié)束后應(yīng)取消所定義的斷點(diǎn)。方法是先把光標(biāo)定位在斷點(diǎn)所在行,再按[Ctrl]+[F8I或執(zhí)行菜單“Break/watch"中的"Togglebreakpoint"操作,該操作是ー個開關(guān),第一次按是設(shè)置,第二次按是取消設(shè)置。被設(shè)置成斷點(diǎn)的行將呈紅色背景。如果有多個斷點(diǎn)想一下全部取消,可執(zhí)行菜單"Break/watch"中的"Clearallbreakpoints"操作。斷點(diǎn)通常用于調(diào)試較長的程序,可以避免使用[F4](運(yùn)行程序到光標(biāo)處暫停)功能時,需要經(jīng)常把光標(biāo)定位到不同的地方。而對于長度為上百行的程序,要尋找某位置并不太方便。如果ー個程序設(shè)置了多個斷點(diǎn),按一次[Ctrl]+[F9]會暫停在第一個斷點(diǎn),再按一次[Ctrl]+[F9I會繼續(xù)執(zhí)行到第二個斷點(diǎn)暫停,依次執(zhí)行下去。(5)循環(huán)的調(diào)試實(shí)例下面用單步執(zhí)行功能來看一下for語句的執(zhí)行流程。如圖7所示。程序中把for(……)分成三行,以便觀察執(zhí)行流程。先把光標(biāo)移動到第四行,然后按[F4]或執(zhí)行菜單Run中的"GotoCursor"操作,按[Ctrl]+[F7]輸入查看變量i?由于此時i未賦過值,所以顯示的是ー個隨機(jī)數(shù)。再連續(xù)按[F8]單步執(zhí)行,可以觀察綠色光條的位置變動和査看變量i的變化,綠色光條的位置變動就是程序執(zhí)行的過程,學(xué)員可以充分體會到for語句的執(zhí)行流程。FileEditHunCompileProjectOptionsDebugBreak/watchLine4Col13InsertIndentTabFillUnindent*E:4FOR.CmainO<IBforC1^1IBforC1^1; 1sum=sum*i;printf(“煞d",sum);) Watch ?i:M09Mt:CF-:屈TM.計(jì)已:mWHUM圖7循環(huán)調(diào)試實(shí)例通過這個例子,讀者可以舉…反三調(diào)試自己的程序了。上面我們只對TC中主要的功能作了介紹,對于其他的操作讀者可以自己試驗(yàn),或參考有關(guān)TurboC手冊。為了盡量減少錯誤的發(fā)生,除了程序本身的正確,書寫格式也非常重要,它體現(xiàn)了編程者的自身素養(yǎng)。每一個人都應(yīng)培養(yǎng)ー個良好的的程序設(shè)計(jì)風(fēng)格,以下幾點(diǎn)應(yīng)該做到:用階梯形式書寫程序,充分體現(xiàn)循環(huán)、分支程序結(jié)構(gòu)的位置與層次,便于程序的調(diào)試,減少程序的書寫錯誤。so左右花括號盡量對齊,函數(shù)間增加空行,以示分隔。神變量名、函數(shù)名的取名采用與其所表達(dá)的意義相同或相近的英文單詞,使得在閱讀程序時容易理解。在程序中加上注解,尤其在關(guān)鍵步驟上,函數(shù)的開始處應(yīng)對函數(shù)的功能、參數(shù)的意義及80返回值予以說明。常用快捷鍵小結(jié)[F1]:幫助【F3]:調(diào)入程序文件;【F2]:保存程序;【Alt】+【F3]:調(diào)入旳近曾經(jīng)用過的文件;【F4】:程序運(yùn)行到光標(biāo)處暫?!続lt】+【F5]:查看運(yùn)行結(jié)果【F7】:單步執(zhí)行(可進(jìn)入函數(shù))【F8】:單步執(zhí)行(不能進(jìn)入函數(shù));【F5】:放大/縮小窗口;【F6】:窗口切換;【Ctrl】+【F7】:增加查看變量;【Ctrl】+【F8】:把光標(biāo)所在行設(shè)為斷點(diǎn);或取消段點(diǎn)【Alt】+【F9】:編譯程序;【F9】:編譯、連接程序;【Ctrl】+【F9】:編譯、連接、執(zhí)行程序【F10】:菜單選擇;【Alt】+[x]:退出系統(tǒng)。Turboc常見錯誤誤分析TurboC編譯系統(tǒng)查出的源程序錯誤分為三類:嚴(yán)重錯誤、一般錯誤和警告錯誤。嚴(yán)重錯誤:一般很少出現(xiàn),它通常是內(nèi)部編譯出錯。一旦出現(xiàn)這類錯誤,編譯立即停止。一般錯誤(error):通常是指源程序中的語法錯誤、存取數(shù)據(jù)錯誤或命令錯誤等。編譯系統(tǒng)遇到這類錯誤時,一般也要停止編譯。警告信息(warning):是指出ー些值得懷疑的情況,而這些情況有可能是源程序中合理的一部分。因此警告信息只是提醒用戶注意,編譯過程并不停止。編譯系統(tǒng)在發(fā)現(xiàn)源程序中各類的錯誤時,首先顯示錯誤信息,然后顯示源文件名以及出錯的行號。但必須注意,真正有錯誤的位置可能在前一行,甚至可能在前兒行,有時,好像發(fā)生了許多錯誤,而實(shí)際上可能是有一個錯誤造成的。下面列出常見的一些編譯錯誤信息,并指出可能的原因。嚴(yán)重錯誤Badcallofin-linefunction在使用ー個宏定義的內(nèi)部函數(shù)時,未能正確調(diào)用。ー個內(nèi)部函數(shù)應(yīng)以兩個短下劃線(__)開始和結(jié)束。Irreducibleexpressiontree不可約束的表達(dá)式樹。這種錯誤是指源文件行中的表達(dá)式太復(fù)雜,編譯系統(tǒng)中的代碼生成程序不能為它產(chǎn)生代碼,因此,這種表達(dá)式應(yīng)避免使用。Registerallocationfailure寄存器分配失敗。一般錯誤#operatornotfollowedbymactoargumentname“ギ’運(yùn)算符后無宏變元名。在宏定義中,“#”用于標(biāo)志一宏變元是ー個串,因此,在“ザ后面必須跟隨一個宏變元名。“xxxxxxxx“notaangument“xxxxxxxx”不是函數(shù)參數(shù)。在源程序中將該標(biāo)識符定義為ー個函數(shù),但它沒有在函數(shù)中出現(xiàn)。3.Ambiguoussymbol“xxxxxxxx”二義性符號"xxxxxxxx"。兩個或兩個以上結(jié)構(gòu)的某ー域名相同,但它們的偏移、類型不同,因此,在變量或表達(dá)式中引用該域但未帶結(jié)構(gòu)名時,就會產(chǎn)生二義性。在這種情況下,需要修改域名,或在引用時加上結(jié)構(gòu)名。Argument#missingname參數(shù)#名丟失。參數(shù)名已脫離用于定義函數(shù)的函數(shù)原型。C語言規(guī)定,如果函數(shù)以原型定義,該函數(shù)必須包含所有的函數(shù)名。Argumentlistsyntaxerror參數(shù)表現(xiàn)出語法錯誤。C語言規(guī)定,函數(shù)調(diào)用的各參數(shù)之間必須以逗號分隔,并以右括號結(jié)束。若源文件中含有一個其后不是逗號也不是右括號的參數(shù),則會出現(xiàn)本錯誤。Arrayboundsmissing數(shù)組的界限符“]”丟失。在源文件中定義了一個數(shù)組,但此數(shù)組沒有一右方括號結(jié)束,則會出現(xiàn)本錯誤。Arraysizetoolarge數(shù)組長度太長。定義的數(shù)組太大,可用內(nèi)存不夠。Assemblerstatementtoolong匯編語句太長。C語言規(guī)定,內(nèi)部匯編語句最長不能超過480個字節(jié)。Badconfigurationfile配置文件不正確。TURBOR.CFG配置文件中包含不是合適命令行選擇項(xiàng)的肥注視文字。C語言規(guī)定,配置文件命令選擇項(xiàng)必須以一短橫線(一)開始。Badfilenameformatinincludedirective包含指令中文件名格式不正確。包含文件名必須用雙引號(如“filename")或尖括號(如<filename>)或起來,否則將出現(xiàn)本錯誤。如果使用了宏,則產(chǎn)生的擴(kuò)展文本也不正確(因?yàn)闊o引號)。Badifdefdirectivesyntaxifdef指令語法錯誤。#ifdef必須以單個標(biāo)識符作為該指令的體。Badifndefdirectivesyntaxifndef指令語法錯誤。#ifndef必須以單個標(biāo)識符作為該指令的體。Badundefdirectivesyntaxundef指令語法錯誤。#undef()必須以單個標(biāo)識符作為該指令的體。Badfilesizesyntax位字段長語法錯誤。ー個位字段長必須是P16為的常量表達(dá)式。Callofnon-function調(diào)用未定義的的函數(shù)。正被調(diào)用的函數(shù)未定義,通常是由于不正確的函數(shù)聲明或函數(shù)名拼寫錯誤所造成。Cannotmodifyaconstobject不能修改ー個常量對象。對定義為常量的對象進(jìn)行不合法的操作(如對常量進(jìn)行賦值)會產(chǎn)生本錯誤。Caseoutsideofswitchcase出現(xiàn)在switch的外面。編譯程序發(fā)現(xiàn)case語句在switch的外面,通常是由于括號不匹配所造成。Casestatementmissingcase語句漏掉。Case語句必須包含一個以冒號結(jié)束的常量表達(dá)式,可能的原因是丟的冒號或在冒號千多了別的符號。CastsyntaxerrorCast語法錯誤。可能在Cast中包含了一些不正確的符號。Characterconstanttoolong字符常量太長。Compoundstatementmissing復(fù)合語句漏掉。編譯程序掃描到源文件末時為發(fā)現(xiàn)結(jié)束大括號號,通常是由于大括號不匹配造成。Conflictingtypemodifiers類型修飾符沖突。對同?指針只能制定一種變址修飾符(如near或far);而對同?函數(shù)也只能給出ー種語言修飾符(如cdecl、pascal>或interrupt)〇Constantexpressionrequired要求常量表達(dá)式。數(shù)組的大小必須是常量,本錯誤通常是由于#define常量的拼寫錯誤造成。Couldnotfindfile'xxxxxxxx.xxx'找不到文件'xxxxxxxx.xxx,。編譯程序找不到命令行上給出的文件。Declarationmissing說明漏掉'';二在源文件中包含了一個struct或union域聲明,但后面漏掉了分號(;).Declarationneedstypeorstorageclass說明必須給出類型或存儲類。如以下說明是錯誤的:i,j;Declarationsyntaxerror說明出現(xiàn)語法錯誤。在源文件中,某個說明丟失了某些符號或有多余的符號。defaultoutsideswitchdefault在switch外出現(xiàn)。這個錯誤通常是由于括號不匹配造成。Definedirectiveneedsneedsanidenfierdefine指令必須有一個標(biāo)識符。?define后面的第一個非空格字符必須是ー個標(biāo)識符,若編譯程序發(fā)現(xiàn)ー些其它字符,則出現(xiàn)本錯誤。DivisionbyZero除數(shù)為零。在源文件的表達(dá)式中出現(xiàn)除數(shù)為零的情況。Dostatementmusthavewhiledo語句中必須要有while.〇Do-whilestatementmissing(do-while語句漏掉了"("。Do-whi1estatementmissing(do-while語句漏掉了")”。Do-whilestatementmissing;do-while語句漏掉了";”。DuplicateCasecase的情況不唯一。Switch語句中的每個case必須有一個唯 一的常量表達(dá)式。Enumsyntaxerrorenum語法錯誤。Enum說明的表示附表的格式不對。Enumerationconstantsyntaxerror枚舉常量語法錯誤。賦給enum類型變量的表達(dá)式不是常量。ErrorDirectivejxxxxerror指令:xxxxo源文件處理#error指令時,顯示該指令指出的信息。Errorwritingoutputfile寫輸出文件出現(xiàn)錯誤。通常是由于磁盤空間不夠造成。Expressionsyntax表達(dá)式語法錯誤。如:在表達(dá)式中連續(xù)出現(xiàn)兩個操作符、括號不匹配或缺少括號、前ー語句漏掉了分號等。Extraparameterincall調(diào)用時出現(xiàn)多余參數(shù)。在調(diào)用ー函數(shù)時,實(shí)際的參數(shù)個數(shù)多于函數(shù)定義中的參數(shù)個數(shù)。Extraparameterincalltoxxxxxxxx調(diào)用xxxxxxxx函數(shù)時出現(xiàn)了多余的參數(shù)。其中該函數(shù)由原型定義。Filenametoolong文件名過長。?include指令中給出的文件名太長,編譯程序無法處理。DOS下的文件名不能超過64個字符。Forstatementmissing(for語句漏掉氣”。Forstatementmissing)for語句漏掉“ゾ。Forstatementmissing;for語句漏掉、”。Fuctioncallmissing)函數(shù)調(diào)用缺少“)”。Functiondefinitionoutofplace函數(shù)定義位置錯誤。函數(shù)定義不能出現(xiàn)在另ー函數(shù)內(nèi)。函數(shù)內(nèi)的任何說明,只要以類似與帶有ー個參數(shù)表的函數(shù)開始,就被認(rèn)為是ー個函數(shù)定義。Functiondoesn'ttakeavariablenumberofargument函數(shù)不接受可變的參數(shù)個數(shù)。源文件中的某個函數(shù)內(nèi)使用了va-start宏,此函數(shù)不能接受可變數(shù)量的參數(shù)。Gotostatementmissinglablegoto語句缺少標(biāo)號。在goto關(guān)鍵字后必須由一個標(biāo)識符。Ifstatementmissing(if語句缺少“(”。Ifstatementmissing)if語句缺少")”。Illegalcharacter(OXxx)非法字符(OXxx)。編譯程序發(fā)現(xiàn)輸入文件中有非法字符,一十六進(jìn)制方式打印該字符。Illegalinitialization非法初始化。初始化必須是常量表達(dá)式后ー全局變量extern或static的地址加減ー常量。Illegaloctaldigit非法ハ進(jìn)指數(shù)。編譯程序發(fā)現(xiàn)在ー個ハ進(jìn)制常數(shù)中包含了非ハ進(jìn)制數(shù)字符號(如8或9)。Illegalpointersubtraction非法指針相減。這是由于試圖以ー個非指針變量減去ー個指針變量而造成的。Illegalstructureoperation非法結(jié)構(gòu)操作。結(jié)構(gòu)只能使用(.)、取地址符(&)和賦值操作符(=),或作為函數(shù)的參數(shù)傳遞。當(dāng)編譯程序發(fā)現(xiàn)結(jié)構(gòu)使用了其它操作符時出現(xiàn)本錯誤。Illegaluseoffloatingpoint非法的浮點(diǎn)操作。浮點(diǎn)操作數(shù)不允許出現(xiàn)在移位、按位邏輯操作、條件(?:)>間接(*)以及其它ー些操作符中。Illegaluseofpointer非法使用指針。指針只能在加、減、賦值、比較、間接(*)或箭頭(一)操作中使用。Improperuseofatypedefsymboltypedef符號使用不對。源文件中使用了一個符號,符號變量應(yīng)在ー個表達(dá)式中出現(xiàn)。檢查一下此符號的說明和可能的拼寫錯誤。In-lineassemblynotallowed不允許內(nèi)部匯編語句。源文件中包含有直接插入的匯編語句,若在集成環(huán)境下進(jìn)行編譯,則要出現(xiàn)本錯誤,必須使用TCC命令編譯該文件。Incompatiblestorageclass不相容的存儲類。源文件的ー個函數(shù)定義中使用了extern關(guān)鍵字,而只有static(或根本沒有存儲類型)是允許的。Incompatibletypeconversion不相容的類型轉(zhuǎn)換。源文件中試圖把?種類型轉(zhuǎn)換成另ー種類型,但這兩種類型是不相容的。如函數(shù)與非函數(shù)間轉(zhuǎn)換、?■?種結(jié)構(gòu)或數(shù)組與一種標(biāo)準(zhǔn)類型間轉(zhuǎn)換、浮點(diǎn)數(shù)與指針間轉(zhuǎn)換等。Incorrectcommandlineargument:xxxxxxxx不正確的命令行參數(shù):xxxxxxxx.Incorrectcinfigurationfileargument:xxxxxxxx不正確的配置文件參數(shù):xxxxxxxx。編譯程序認(rèn)為該配置文件是非法的,此時可檢查一下前面的短橫線(-)。Incorrectnumberformat不正確的數(shù)據(jù)格式。編譯程序發(fā)現(xiàn)在十六進(jìn)制樹種出現(xiàn)十進(jìn)制小數(shù)點(diǎn)。Incorrectuseofdefaultdefault的不正確使用。編譯程序發(fā)現(xiàn)default關(guān)鍵字后缺少分號。Initializersyntaxerror初始化語法錯誤。初始化過程中缺少了操作符,括號不匹配,或其他?些不正常的情況。Invalidindirection無效的間接運(yùn)算。間接運(yùn)算符(*)要求非控制真作為操作分量。Invalidmacroargumentseparator無效的宏參數(shù)分隔符。在宏定義中,各參數(shù)必須永逗號分隔。編譯程序發(fā)現(xiàn)在參數(shù)后面有其它非法字符。Invalidpointeraddition無效的指針相加。源程序中試圖把兩個指針相加。Invaliduseofarro箭頭使用錯。在箭頭操作符(f)后必須跟ー標(biāo)識符。Invaliduseofdot點(diǎn)使用錯。在點(diǎn)操作符(.)后必須跟一標(biāo)識符。Lvaluerequired請求賦值。賦值操作符的左邊必須是一個地址表達(dá)式、包括數(shù)值變量、指針變量、結(jié)構(gòu)引用域、間接指針或數(shù)祖分量。Macroargumentsyntaxerror宏參數(shù)語法錯誤。宏定義中的參數(shù)必須是一個表示符。編譯擦程序發(fā)現(xiàn)所需的參數(shù)不是表示符的字符,則出現(xiàn)本錯誤。Macroexpansiontoolong宏擴(kuò)展太長。ー個宏擴(kuò)展不能多于4096個字符。當(dāng)宏遞歸擴(kuò)展自身時,常出現(xiàn)本錯誤。宏不能對自身進(jìn)行擴(kuò)展。Maycompileonlyonefilewhenanoutputfilenameisgiven給出ー個輸出文件名時,可能只編譯一個文件。在命令行編譯時,若只使用ー〇選擇,則只允許ー個輸出文件名。此時,只編譯第一個文件,其它文件被忽略。Mismatchnumberofparametersindefinition定義中參數(shù)各數(shù)不匹配。定義中的參數(shù)和函數(shù)原型中提供的信息不匹配。Misplacedbreakbreak位置錯誤。編譯程序發(fā)現(xiàn)break語句在switch語句或循環(huán)外。Misplacedcontinuecontinue位置錯誤。編譯程序發(fā)現(xiàn)continue語句在循環(huán)結(jié)構(gòu)外。Misplacedelse十進(jìn)制小數(shù)點(diǎn)位置錯。編譯程序發(fā)現(xiàn)浮點(diǎn)常數(shù)的指數(shù)部分有一個十進(jìn)制小數(shù)點(diǎn)。Misplacedelseelse位置錯。編譯程序發(fā)現(xiàn)else語句缺少與之相配套的if語句。本錯誤的產(chǎn)生除了由于else多余外,還有可能是由于有多余的分號、漏寫了大括號或前面的if語句出現(xiàn)語法錯誤引起的。Misplacedelifdirectiveelif指令位置錯誤。編譯命令沒有發(fā)現(xiàn)與#enif指令相配的#if、#ifdef或#ifndef指令。Misplacedelsederectiveelse指令位置錯誤。編譯命令沒有發(fā)現(xiàn)與#else指令相配的#if、#ifdef或#ifndef指令。Misplacedendifdirectiveendif指令位置錯誤。編譯命令沒有發(fā)現(xiàn)與#endif指令相配的#if、#ifdef或#ifndef指令。Mustbeadressable必須是可編址的。取址操作符(&)作用與一個不可編址的對象,如寄存器變量。Musttakeaddressofmemorylocation必須是內(nèi)存一地址。源文件中對不可編址的表達(dá)式使用了地址操作符(&),如對寄存器變量。Nofilenameending無文件中止符。在#include語句中,文件名缺少正確的閉引號「)或尖括號(>)?Nofilenamegiven未給出文件名。Turbo命令行編譯(TCC)中沒有任何文件。Non-protablepointerassingmentxsw對不可移植的指針賦值。源程序中將一個指針賦給ー個非指針,或相反。但作為特例,允許把常量零值賦給ー個指針,如果是這種情況,則應(yīng)強(qiáng)行抑制本錯誤信息。Non-protablepointercomparision不可移植的指針比較。源程序中將一個指針與一個非指針(常量零除外)進(jìn)行比較。但如果比較恰當(dāng)則應(yīng)強(qiáng)行抑制本錯誤信息。Non-protablereturntypeconversation不可移植的返回型轉(zhuǎn)換。在返回語句中的表達(dá)式類型與函數(shù)說明中的類型不同。但如果函數(shù)的返回表達(dá)式是一指針,則可以進(jìn)行轉(zhuǎn)換,此時,返回指針的函數(shù)可能送回一個常量零,而零被轉(zhuǎn)換成一個適當(dāng)?shù)闹羔樦?。Notanallowedtype不允許的類型。在源文件中說明了幾種禁止了的類型,如函數(shù)返回ー個函數(shù)或數(shù)組。Outofmemory內(nèi)存不夠。Pointerrequiredonleftsideof操作符左邊必須是一個指針。Redeclarationof'xxxxxxxx'“xxxxxxxx”重定義。Sizeofstrutureorarraynotknown結(jié)構(gòu)或數(shù)組大小不定。有些表達(dá)式(如sizeof或存貯說明)中出現(xiàn)ー個未定義的結(jié)構(gòu)或ー個空長度數(shù)組。如果結(jié)構(gòu)長度不需要,則在定義之前就可引用;如果數(shù)組不申請存儲空間或者初始化是給定了長度,則可定義為空長。Statementmissing語句缺少J”。structrureorunionsyntaxerror結(jié)構(gòu)或聯(lián)合語法錯誤。編譯程序發(fā)現(xiàn)在struct或關(guān)鍵定后面沒有標(biāo)識符或開花括號。Structuresizetoolarge結(jié)構(gòu)太大。源文件中說明的結(jié)構(gòu)所需的內(nèi)存區(qū)域太大以致內(nèi)存空間不夠。Subscriptingmissing]下標(biāo)缺少“]”??赡苁怯捎诼┑艋蚨鄬懖僮鞣蚶ㄌ柌黄ヅ湟鸬摹witchstatementmissing(switch語句中缺少“(”。Switchstatementmissing)swich語句中缺少Toofewparametersincall函數(shù)調(diào)用參數(shù)太少。對帶有原型的函數(shù)調(diào)用(通過一個函數(shù)指針)參數(shù)太少。原型要求給出所有參數(shù)。Toofeewparametersincallto'xxxxxxxx'調(diào)用“xxxxxxxx”時參數(shù)太少。調(diào)用指定的函數(shù)(該函數(shù)用一原型聲明)時,給出的參數(shù)太少。Toomanycasescase太多。語句取多允許有257個case。Toomanydecimalpoints十進(jìn)制小數(shù)點(diǎn)太多。toomanydefaultcasesdefault太多。switch語句中只能有一個default〇Toomanyexponents階碼太多。Toomanyinitializers初始化太多。Toomanystorageclassesindeclaration說明中存儲類太多。ー個說明只允許有一種存儲類。Toomanytypesindeclaration說明中類型太多。ー個說明只允許有一種下列基本類型:char,int,float,double,struct,union,enum或typedef名。Toomuchautomemoryinfunction函數(shù)中自動存儲太多。當(dāng)前函數(shù)聲明的自動存儲超過了可用的存儲器空間。Toomuchcodedefineinfile文件定義的代碼太多。當(dāng)前文件中函數(shù)的總長度超過了64K字節(jié)??梢砸迫ゲ槐匾拇a或把源文件分開寫。Toomuchglobaldatadefineinfile文件中定義的全局?jǐn)?shù)據(jù)太多。全局?jǐn)?shù)據(jù)聲明的總數(shù)超過了64K字節(jié)。檢查ー下一些數(shù)組的定義是否太長。如果所有的說明都是必要的,則要考慮重新組織程序。Twoconsecutivedots兩個連續(xù)點(diǎn)。因?yàn)槭÷蕴柊齻€點(diǎn)而十進(jìn)制的小數(shù)點(diǎn)和選擇操作符使用ー個點(diǎn)(.),所以,在C程序中不允許出現(xiàn)兩個連續(xù)點(diǎn)。Typemissmatchinparameter#參數(shù)“ギ’類型不匹配。通過一個指針訪問已由原形說明參數(shù)時,給定參數(shù)#N(從左到右N逐個加1)不能轉(zhuǎn)換為已說明的參數(shù)類型。Typemissmatchinparameter'XXXXXXXX'調(diào)用“XXXXXXXX”時參數(shù)#不匹配。源文件中通過ー個原形說明了指定的參數(shù),而給定的參數(shù)(從械到可N逐個加1)不能轉(zhuǎn)換為已說明的參數(shù)類型。Typemissmatchinparameter*XXXXXXXX*參數(shù)“XXXXXXXX”類型不匹配。源文件中通過一個原形說明了可由函數(shù)指針調(diào)用的函數(shù),而所指定的參數(shù)不能轉(zhuǎn)換為已說明的參數(shù)類型。Typemissmatchinparameter'XXXXXXXX'incallto'YYYYYYYY)調(diào)用“YYYYYYYY"時,參數(shù)"XXXUXXX"類型不匹配。源文件雖通過ー個原形說明了指定的參數(shù)不能轉(zhuǎn)換為另ー個已說明的參數(shù)類型。Typemissmatchinredeclarationof'XXX'重定義類型不匹配。源文件中把ー個已經(jīng)說明的變量重新說明為另ー種變量。如果ー個函數(shù)被調(diào)用,而后又被說明成非整型也會產(chǎn)生本錯誤。在這種情況下,必須在第一次調(diào)用函數(shù)前,給函數(shù)加上extern說明。Unabletocreatoutputfile'XXXXXXXX.XXX'不能創(chuàng)建輸出文件"XXXXXXXX.XXX".當(dāng)工作軟盤已滿或有寫保護(hù)時產(chǎn)生本錯誤。Unabletocreatturboc.Ink不能創(chuàng)建turboc.Ink。編譯程序不能創(chuàng)建臨時文件TURBOC.$LN,因?yàn)椴荒艽嫒〈疟P或者磁盤已滿。Unabletoexecutecommand'xxxxxxxx'不能執(zhí)行"xxxxxxx”命令。找不到TLILNK或MASM,或者磁盤出錯。Unabletoopenincludefile'xxxxxxx.xxx'不能打開包含文件“"xxxxxxx.xxxo編譯程序找不到該包含文件??赡苁怯捎讴`個#include文件包含它本身而引起的,也可能是根目錄下的CONFIG.SYS中沒有設(shè)置能同時打開的文件個數(shù)(試加一句files=20)oUnabletoopeninputfile'xxxxxxxx.xxx'不能打開輸入文件"xxxxxxx.xxx”。當(dāng)編譯程序找不到源文件時出現(xiàn)本錯誤。檢査文件名是否拼錯,或檢查對應(yīng)的磁盤目錄中是否有此文件。Undefinedlabel'xxxxxxxx'標(biāo)號“xxxxxxxx”未定義。函數(shù)中g(shù)oto語句后的標(biāo)號沒有定義。Undefinedstucture'xxxxxxxx'結(jié)構(gòu)“xxxxxxxx”未定義。源文件中使用了未經(jīng)說明的某個結(jié)構(gòu)??赡苁怯捎诮Y(jié)構(gòu)名拼寫錯誤或缺少結(jié)構(gòu)說明而引起的。Undefinedsymbol'xxxxxxxx'符號“xxxxxxxx”未定義。標(biāo)識符無定義,可能是由于說明或引用處有拼寫錯誤,也可能是由于標(biāo)識符說明錯誤而引起。Unexpectedendoffileincommentstartedonline#源文件在某個注釋中意外結(jié)束。通常是由于注釋結(jié)束標(biāo)志(*/)漏掉引起。Unexpectedendoffileinconditionalstartedonline#源文件在#行開始的條件語句中意外結(jié)束。在編譯程序遇到#endif前源程序結(jié)束,通常是由于漏掉或拼寫錯誤引起。Unknownpreprocessordirectire,xxx'不認(rèn)識的預(yù)處理指令:XXXo編譯程序在某行的開始遇到“#”字符,但其后的指令名不是下列之一:define,undef,line,ifdef,ifndef,include,else或endif〇Unterminatedcharacterconstant未終結(jié)的字符常量。編譯程序發(fā)現(xiàn)ー個不匹配的省略符。Unterminatedstring未終結(jié)的串。編譯程序發(fā)現(xiàn)ー個不匹配的引號。Unterminatedstringorcharacterconstant未終結(jié)的串或字符常量。編譯程序發(fā)現(xiàn)串或字符常量開始后沒有終結(jié)。Userbreak用戶中斷。在集成環(huán)境中進(jìn)行編譯或連接時用戶按了ctrl+break鍵。Whilestatementmissing(while語句漏掉“(二Whilestatementmissing)while語句漏掉り”。Wrongnumberofargumentsinof'xxxxxxx'調(diào)用“xxxxxxx”時參數(shù)個數(shù)錯誤。源文件中調(diào)用某個宏時,參數(shù)個數(shù)不對。3警告信息‘xxxxxxxx*declaredbutneveruse說明了‘xxxxxxxx’但未使用。在源文件中說明了改變量,但沒有使用。'xxxxxxxx'isassignedavaluewhichisneverused'xxxxxxxx’被賦以ー個不使用的值。該變量出現(xiàn)ー個賦值語句中,但直到函數(shù)結(jié)束都未使用過。‘xxxxxxxx'notpartofstructure'xxxxxxxx'不是結(jié)構(gòu)的一部分。出現(xiàn)在點(diǎn)(.)或箭頭(->)左邊的域名不是結(jié)構(gòu)的一部分:或者點(diǎn)的左邊不指向結(jié)構(gòu)。'ambiguousoperatorsneedparentheses'二義性操作符需要括號。如:兩個位移、關(guān)系或按位操作符在ー起使用而不加括號,ー加法或減法操作符不加括號與一位操作符出現(xiàn)在ーー起bothreturnandreturnofavalueused即用返回又用返回值。編譯程序發(fā)現(xiàn)ー個與前面的RETURN語句不一致的RETURN語句。當(dāng)某函數(shù)只在部分RETURN語句中返回值時,一般會發(fā)生本錯誤。calltofunctionwithprototype調(diào)用無原型函數(shù)?!霸驼埱蟆本婵捎茫矣终{(diào)用了一無原型函數(shù)。calltofunction'xxxx'withprototype調(diào)用無原型的‘xxxx'函數(shù)。原型請求”警告可用,且又調(diào)用了一個原先沒有原型的函數(shù)'xxxx'。codehasnoeffect代碼無效。編譯程序遇到ー個含無效操作符的語句,如“a+b;”,對每ー變量都不起作用,且可能要引起一個錯誤。constantislong常量是Long類型。當(dāng)編譯程序遇到ー個十進(jìn)制常量大于32767,或ー個ハ進(jìn)值常量大于65535,而其后沒有字母"I”或"L”時,把此常量當(dāng)作Long類型處理。constantoutofrangeincomparision比較時常量超出了范圍。在源文件中有一比較,其中一個常量子表達(dá)式超出了另一個子表達(dá)式類型所允許的范圍。如:ー個無符號量與一1比較就沒有意義。為了得到ー個大于32767(十進(jìn)制)的無賦好書,可以在常量前面加上unsigned(如(unsigned)65535),或在常量后加上字母“u”或"U”(如65535u)conversionmaylosesignificantdignits轉(zhuǎn)換可能丟失高位數(shù)字。在賦值操作或其他情況下,源程序要求把long或unsignedlong類型轉(zhuǎn)換成int或undesignedint類型。functionshoultreturnavalue函數(shù)應(yīng)返回一個值。源文件中說明的當(dāng)前函數(shù)的返回類型即非int型也非void行,編譯程序未發(fā)現(xiàn)返回值。mixingpointertosignedandunsignedchar混淆signed和unsignd字符指針。沒有通過顯示的強(qiáng)制類型轉(zhuǎn)換,就把ー個字符指針轉(zhuǎn)換為無符號指針,或相反。nodeclarationforfunction'xxxxxxxx'函數(shù)’xxxxxxxx’沒有說明?!罢f明請求”警告可用,而又調(diào)用了一個預(yù)先沒有說明的函數(shù)。non-portablepointerassignment不可移植指針賦值。源文件中把一個指針賦給另?個非指針,或相反。但作為特例,可以把常量賦個ー個指針,此時可強(qiáng)行抑制本警告。non-portablepointercomparision不可移植指針比較。源文件中把ー個指針與另ー個非指針做比較。但作為特例,可以把常量零予以個指針做比較,此時可強(qiáng)行抑制本警告。non-portablereturntypeconversion不可移植返回類型轉(zhuǎn)換。Return語句中的表達(dá)式類型和函數(shù)說明的不一致。作為特例,如果函數(shù)或返回值表達(dá)式為一個指針時可以的,在這種情況下,返回指針的函數(shù)可能返回一個常量零,被轉(zhuǎn)換成一個合適的指針值。parameter'xxxxxxxx'isneverused參數(shù)'xxxxxxxx'沒有使用。函數(shù)說明中的某參數(shù)在函數(shù)體中從未使用,通常是由于參數(shù)名拼寫錯誤引起的。如果在函數(shù)體中該標(biāo)識符被重新定義為ー個自動(局部)變量,也將發(fā)生本警告。該參數(shù)被標(biāo)識為自動變量但未使用。possiableuseof'xxxxxxxx'beforeused在定義'xxxxxxxx'之前可能已使用。源文件中的某ー表達(dá)式中使用了未經(jīng)符值的變量,編譯程序隊(duì)員文件進(jìn)行簡單掃描已確定此文件。如果該變量出現(xiàn)的物理位置在對它賦值之前,就會產(chǎn)生本警告,當(dāng)然,程序的實(shí)際流程可能在使用前已賦值。possibleincorrectassignment可能的不正確賦值。例如,編譯程序遇到賦值操作符作為條件表達(dá)式(如if、while>do-while語句的一部分)的主操作符,這通常是由于把賦值號當(dāng)作等號使用了。如希望禁止此警告,可把賦值語句用括號括起來,并把它與零作顯示比較,如:if(a=b)…應(yīng)寫為if((a=b)!=0)…redefinitionof'xxxxxxxx'isnotidentical'xxxxxxxx’重定義不相同。源文件中對命令宏重定義時,使用的正文內(nèi)容與第一次定義的不相同,新內(nèi)容將代替舊內(nèi)容。restartingcompilerusingassembly用匯編重新啟動編譯。編譯程序遇到ー個未使用命令行選擇項(xiàng)ーB或#pragmainline語句的asm。structurepassedbyvalue結(jié)構(gòu)安值傳送。通常是在編制程序時,把結(jié)構(gòu)作為參數(shù)傳遞,而又漏掉了地址操作符(&)。superfluous&withfunctionorarray在函數(shù)或數(shù)組重油多余的符號“&”。取值操作符(&)對ー個數(shù)組或函數(shù)名是不必要的。應(yīng)該去除。suspiciouspointerconversion值得懷疑的指針轉(zhuǎn)換。編譯程序遇到ー些指針轉(zhuǎn)換,這些轉(zhuǎn)換引起指針指向不同的類型。undefinedstructure'xxxxxxxx'結(jié)構(gòu)'xxxxxxxx'未定義。在源文件中使用了該結(jié)構(gòu),但為定義,。這可能是山于結(jié)構(gòu)名拼寫錯誤或忘記定義引起的。unknownassemblerinstruction不認(rèn)識的匯編指令。編譯程序發(fā)現(xiàn)在插入的匯編語句中有一個不允許的操作符unreachablecode不可達(dá)代碼。Break,continue,goto或return語句后沒有跟標(biāo)號或循環(huán)函數(shù)的結(jié)束符。編譯程序使用ー個常量測試條件來檢查while,do和for循環(huán),并試圖知道循環(huán)沒有失敗。voidfunctionmaynotreturnavaluevoid函數(shù)不可以返回值。源文件中的當(dāng)前函數(shù)說明為void,但編譯程序發(fā)現(xiàn)ー個帶常值的返回語句,該返回語句的值將被忽略。30.zerolengthstructure結(jié)構(gòu)長度為零。在源文件中定義了一個總長度為零的結(jié)構(gòu),對此結(jié)構(gòu)的任何使用都是錯誤的〇3.BorlandCBorlandC是在TC界面上進(jìn)ー步發(fā)展而來的,它提供了集輸入、修改、調(diào)試及運(yùn)行為一體的集成操作環(huán)境,并支持C++語言,可以進(jìn)行鼠標(biāo)操作,在功能的實(shí)現(xiàn)上比TC方便的多。由于其操作過程與TC十分相似,這里我們以BorlandC3.1為對象,簡單介紹其增加的功能。因此希望讀者能先學(xué)習(xí)TC的內(nèi)容,TC上絕大多數(shù)的操作在BC3.1上都能實(shí)現(xiàn)。3.1BC啟動BC需要做安裝,過程十分方便。首先執(zhí)行安裝盤上的“install.exe”應(yīng)用程序,按照提示指定安裝目錄,然后ー步步確定下來即可。安裝完成后,在“開始”菜單“程序”項(xiàng)下有“BorlandC”,點(diǎn)擊它便可以啟動BC3.!〇也可以在桌面上建立快捷方式,假定BC被安裝在D:\BorlandcT,可直接把D:\Borlandc\Bin\Bc.exe拖到桌面上,這是支持Dos的版本,界面與TC相似。另外BC還提供Windows版本,應(yīng)用程序?yàn)镈:\Borlandc\Bin\Bcw.exe〇圖ー8和圖ー9分別是BC的Dos版界面與Windows版界面。=FileEditSearchKunCompileDebugProjectOptionsvlindow★include<stdio.h>tincludeくiostream.h>mainO(intx;floaty=1.23456789;uniona€inti;ch?arc[2];)u;x=_[■scan小褊T,&c1);trintfCXd*c*d\n",c1,cCompilingNOHAMEOO.CPP:?ErrorNONAMEOO.CPP6:TvpenameexpectedIrrorHONAME00.Cl larationmissing;ErrorNONftMEOO.C!機(jī)漣?isnotamemberofWarningNONOME00.FunctionshouIdreturnaualurF1HelpAlt-ffiHextMsgAlt-F7PrevMsgfilt-F9CompileF9MakeF10Menu圖ー8BC的Dos版界面菜單CompilingNONAMEOOCPR隹B”13C**WarningNUNAMtUU.CPP11:functionshouldreturnavalueWarningNONAMCOO.CPP11:'y*isassignedavaluethatisneverusedWarningNONAMEOO.CPP11:'x1isassignedak/aluethatisnes/erusedド"°E1" fnnpi1*ProjectRrrw山べm?ゼ?de.?|H+ゆ|ぜけI|r.|"いI詞づI而觸I zJ11:21Modifiedlnw>JWamrigNONAMEOO.CPP11:Functionthouldreturnavalue圖ー9BC的Windows版界面3.2 運(yùn)行程序要運(yùn)行一個C程序,必須經(jīng)過:輸入源程序、修改錯誤、編譯連接和運(yùn)行幾個步驟。(1)編輯在編輯窗口中,直接輸入程序。如果要進(jìn)行修改,可以使用[t】、【I】、【ー】、【ー】四個方向鍵,也可以直接按動鼠標(biāo),把光標(biāo)移動到所需位置,然后刪除錯誤,輸入正確的內(nèi)容。(2)編譯、連接和運(yùn)行同時按下[Ctrl]+[F9I鍵,將對編輯窗口中的程序,完成編譯、連接和運(yùn)行三個步驟。如果程序沒有錯誤,將直接運(yùn)行程序;如果存在編譯錯誤,信息窗口中將顯示錯誤信息,并終止連接與執(zhí)行步驟;如果編譯通過,但存在連接錯誤,信息窗口中將顯示錯誤信息,并終止執(zhí)行步驟。任何錯誤都必須糾正后,重新按[Ctrl]+[F9]鍵運(yùn)行。如果還有錯,繼續(xù)修改,直到能正確執(zhí)行為止。(3)輸入數(shù)據(jù)如果程序中有scanf()語句,則屏幕將出現(xiàn)ー個黑底的輸入窗口,等待輸入數(shù)據(jù),通常是輸入ー個數(shù)據(jù),打一個空格或回車,然后輸入下一個數(shù)據(jù)。直到輸入完所有的數(shù)據(jù)。如果scanf()語句中格式規(guī)定是逗號分隔,則各數(shù)據(jù)之間要輸入逗號。(4)查看結(jié)果輸入完數(shù)據(jù),系統(tǒng)將自動關(guān)閉輸入窗口,運(yùn)行程序后,回到編輯窗口。但運(yùn)行結(jié)果并未在屏幕上顯示,若要查看運(yùn)算結(jié)果,需要按[Alt]+[F5]才出現(xiàn)輸出窗口??赐旰?再按任意鍵將關(guān)閉輸出窗口。上述步驟步驟與TC完全相同,并且適用于BC的Dos版與Windows版。BC的Dos版菜單我們將只介紹“編輯”、“查找”和“窗口”菜單,其他菜單與TC相似。由于TC環(huán)境下不能使用鼠標(biāo),對打開菜單欄有兩種方法:Edit(編輯操作)圖ー10編輯菜單BC中支持鼠標(biāo)操作,拖動鼠標(biāo)可以選中一塊文本,進(jìn)ー步的操作可以在菜單下進(jìn)行,而不必象TC那樣須記憶一大堆快捷鍵命令。Cut:剪切到剪切版Copy:復(fù)制到剪切版Paste:從剪切版粘貼Clear:刪除選中文本Undo:撤銷上一次操作ShowClipboard:顯示剪切版內(nèi)容。Search菜單(查找與替換操作)在TC中查找與替換操作也是通過熱鍵執(zhí)行的,不易記憶,BC中可方便地通過菜單進(jìn)行。SearchRunCompileDebugReplace...SearchagainCtr1+LGotolinenumber...Previouserror Alt+F7Hexterror IHt+F8Locatefunction.??圖ー11查找與替換菜單Find:査找字符,在隨后打開的對話框中填入查找字符,并作設(shè)置。Replace:替換字符,在隨后打開的對話框中填入查找字符和想替換成的字符。Searchagain:重復(fù)上一次的查找或替換。Window菜單(窗口操作)BC中允許同時打開兒個C程序,每ー個程序都有自己的編輯窗口,對于有多個模塊的程序,多窗口為各模塊相互之間的編輯、調(diào)試提供了方便。另外,出錯信息、輸入輸出和觀察量都在自己獨(dú)立的窗口中顯示。tOptionsWindowHelpCascadeTileNext F6Close Alt+F3CloseallMessageOutputWatchUserscreenAlt+F5RegisterProjectProjectnotesListall... Alt?0圖ー12窗ロ操作菜單Size/Move:按【t】、【I】、【ー】、【f】四個方向鍵,移動編輯窗口:按【Shif”+【t】、【I】、【ー】、【ー】,改變窗口大小。Zoom:“旳大化”或“還原”編輯窗口Cascade:層疊各編輯窗口。Tile:平鋪各編輯窗口。Next:切換到下ー個窗口。Close:關(guān)閉當(dāng)前窗口。Closeall:關(guān)閉所有窗口。Massage/Output/Watch/Userscreen:切換到出錯信息/輸出/調(diào)試觀察/用戶操作窗口。Listall:給出所有窗口的列表。BC的Windows版BC的Windows版提供了一個完全的Windows應(yīng)用程序的操作界面。其操作主要使用鼠標(biāo),允許同時打開幾個C程序,每ー個程序都有自己的編輯窗口。在編輯窗口中,可以直接輸入程序,經(jīng)編譯連接后,運(yùn)行程序。^jBorlandC++FileEditSearchRunCompileProjectBrowseOptionsWindowHelp?FileEditSearchRunCompileProjectBrowseOptionsWindowHelp?I屮I?榻遞|QIAI堂!因:對治[剛為)I-ln|x|±J被生成可執(zhí)行代碼。執(zhí)行“Run”菜單的“Run”命令,可以運(yùn)行程序,如圖ー-ln|x|±J被生成可執(zhí)行代碼。執(zhí)行“Run”菜單的“Run”命令,可以運(yùn)行程序,如圖ー15所示。快捷鍵[Ctrl]+[F9I也可執(zhí)行程序。圖ー14編譯連接通過界面圖T5運(yùn)行程序菜單d:\borlandc\bin\nona*eOO.cppmain()£intx;floaty=l.23456789;charcl,c2;

圖T3BC操作界面BCW菜單與前面介紹的相差不大,熟悉Windows界面的讀者,可以很容易理解其中功能。這里簡單介紹工具按鈕的功能。.2J:提供幫助信息。兇:調(diào)入文件并打開。由:保存文件。回:查找?;?:替換。田:復(fù)制。I圍:剪切。IC£i:粘貼。聞:撤銷操作。厠:編譯當(dāng)前窗口中的程序。陶:編譯、連接當(dāng)前窗口中的程序。編譯連接后出現(xiàn)圖ー14的界面,表示程序已VisualC語言集成環(huán)境C++語言是在C語言的基礎(chǔ)上發(fā)展面來,它增加了面向?qū)ο蟮木幊?成為當(dāng)今旳流行的ー?種程序設(shè)計(jì)語言。VisualC++是微軟公司開發(fā)的,面向Windows編程的C++語言工具。它不僅支持C++語言的編程,也兼容C語言的編程。由于VC++被廣泛地用于各

種編程,使用面很廣。這里簡要地介紹如何在VC++下運(yùn)行C語言程序。啟動VC++VC++是ー個龐大的語言集成工具,經(jīng)安裝后將占用幾百兆磁盤空間。從“開始”-,,程序,,—,,MicrosoftVisualStudio6.0”—“MicrosoftVisualC++6.0”,可啟動VC++,屏幕上將顯示圖T6所示的窗口。新建/打開C程序文件選擇“文件”菜單的“新建”菜單項(xiàng),單擊如圖ー17所示的“文件”標(biāo)簽,選中"C++SourceFile",按“確定”。然后在編輯窗口中輸入程序。-iDlxl菜單欄圖文件編輯查看插入工程巽譯工具え口聚助國-iD

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論