使用高級(jí)語(yǔ)言編程時(shí),我們通常使用一個(gè)集成開(kāi)發(fā)環(huán)境(Integrated Developing Enviroment,簡(jiǎn)稱(chēng)IDE)來(lái)進(jìn)行編輯、編譯、運(yùn)行和調(diào)試工作。對(duì)于 C 和 C++ 語(yǔ)言,常用的集成開(kāi)發(fā)環(huán)境有:很早的 Turbo C 和 Turbo C++(這兩個(gè)太舊了,不推薦使用)、復(fù)雜而龐大的Microsoft Visual Studio(有6.0,7.1,2003,2005,2008,2013,2015等多個(gè)版本),免費(fèi)而簡(jiǎn)潔的 Dev-C++ 和 Code::Block 等等。在此簡(jiǎn)要介紹 Dev-C++ 的安裝和使用方法。
1、安裝與啟動(dòng)
Dev-C++ (有時(shí)候也稱(chēng)為 Dev-Cpp)是一個(gè)免費(fèi)軟件,最早是由 BloodShed 公司開(kāi)發(fā)的,在版本 4.9.2 之后該公司停止開(kāi)發(fā)并開(kāi)放源代碼。然后由 Orwell 接手進(jìn)行維護(hù),陸續(xù)開(kāi)發(fā)了幾個(gè)版本,后來(lái)也有其他開(kāi)發(fā)人員陸續(xù)參與開(kāi)發(fā)維護(hù)并發(fā)布了一些分支版本。
建議讀者從 Dev-C++ 中文版網(wǎng)站(https://devcpp.gitee.io/)下載新版本(2020年9月):Dev-C++ 5.15中文版。
下載之后開(kāi)始安裝。安裝過(guò)程很簡(jiǎn)單,按照對(duì)話(huà)框的操作提示執(zhí)行即可,在此略過(guò)不敘。
安裝完畢之后,雙擊 Windows 桌面上的 Dev-C++ 圖標(biāo),以啟動(dòng)Dev-C++。工作界面如下圖所示。編譯成功之后可以點(diǎn)擊工具欄上的“運(yùn)行”按鈕,就可以運(yùn)行程序。有時(shí)為了省事,可以直接點(diǎn)擊工具欄上的“編譯運(yùn)行”按鈕。
界面上依次顯示有菜單欄和兩行工具欄。其中第1行工具欄是平時(shí)使用最多的,其各個(gè)按鈕的功能如下圖所示:
2、編輯功能
點(diǎn)擊工具欄上的“新建源代碼”按鈕(或者按快捷鍵 Ctrl+N),就可以新建一個(gè)空白的源代碼文件,并開(kāi)始編寫(xiě)程序了。
點(diǎn)擊工具欄上的“打開(kāi)”按鈕(或按快捷鍵 Ctrl+O),就可以打開(kāi)一個(gè)原有的源代碼文件或工程文件,進(jìn)行編輯。
點(diǎn)擊工具欄上的“保存”按鈕(快捷鍵 Ctrl+S),即可保存當(dāng)前編輯的文件,默認(rèn)文件擴(kuò)展名為“.cpp”。需要注意的是,默認(rèn)情況下每次保存文件時(shí),Dev-C++ 都會(huì)自動(dòng)對(duì)當(dāng)前文件按照基本書(shū)寫(xiě)規(guī)范進(jìn)行格式化(整理文件中的空行、空格、括號(hào)和縮進(jìn))。
點(diǎn)擊工具欄上的“關(guān)閉”按鈕,即可關(guān)閉當(dāng)前編輯的文件。
在 Dev-C++ 中編輯文件時(shí),基本操作與其它文本編輯器是完全相同的。不過(guò),除了基本的文本編輯功能之外,Dev-C++還提供了以下一些用于程序編輯的方便功能:
(1)點(diǎn)擊“插入片段”按鈕,可以插入一些常用的代碼片段。建議用戶(hù)在編輯每個(gè)源文件時(shí),可以插入“文件頭注釋塊”和“C++ main”,以快速開(kāi)始編輯工作。
(2)編輯區(qū)左邊的行號(hào)區(qū)中顯示了代碼中的塊狀結(jié)構(gòu),可供用戶(hù)看出代碼中的復(fù)合語(yǔ)句層次。
(3)編輯窗口左邊的“符號(hào)和類(lèi)”窗格中顯示了當(dāng)前程序中定義的函數(shù)、全局變量、結(jié)構(gòu)體和類(lèi)等信息,方便用戶(hù)掌握整個(gè)程序的結(jié)構(gòu)。
例如,某個(gè)編輯狀態(tài)如下:
3、編譯與運(yùn)行
程序編寫(xiě)完畢,就可以進(jìn)行編譯了。
首先要設(shè)置編譯器。 點(diǎn)擊Dev-C++工具欄上的“編譯器配置”下拉框,就可以看到多種編譯器的配置方案并從中選擇。 Dev-C++ 默認(rèn)安裝的編譯器是 TDM-GCC 9.2.0(這是一個(gè)免費(fèi)開(kāi)源的C/C++編譯器)。選擇時(shí)主要是考慮兩個(gè)因素:1、根據(jù)自己所安裝的Windows系統(tǒng)是 64 位還是 32 位而選擇含有“64位”或“32位”的配置方案;2、在準(zhǔn)備進(jìn)行調(diào)試時(shí)只能選擇含有“調(diào)試”的方案,只有對(duì)于大型程序才需要改用含有“性能分析”和“發(fā)行”的方案。
對(duì)于大部分用戶(hù)來(lái)說(shuō),使用默認(rèn)的“TDM-GCC 9.2.0 32位 調(diào)試”方案即可。
程序編寫(xiě)完成之后,點(diǎn)擊工具欄上的“編譯”按鈕,就可以開(kāi)始編譯,稍等片刻就會(huì)完成編譯。如果編譯出錯(cuò),則在編輯器下方顯示出編譯信息面板,其中列出了編輯過(guò)程中的出錯(cuò)信息(Dev-C++ 自動(dòng)地把出錯(cuò)信息翻譯成了中文?。?。用戶(hù)需要根據(jù)出錯(cuò)信息對(duì)程序進(jìn)行修改。(常見(jiàn)編譯錯(cuò)誤解析)編譯成功之后可以點(diǎn)擊工具欄上的“運(yùn)行”按鈕,就可以運(yùn)行程序。有時(shí)為了省事,可以直接點(diǎn)擊工具欄上的“編譯運(yùn)行”按鈕。
4、Dev-C++ 中的程序調(diào)試方法
編譯時(shí)可以檢查出源代碼中的語(yǔ)法錯(cuò)誤,但是檢查不出源代碼中的邏輯錯(cuò)誤。有時(shí)候程序雖然能夠編譯并運(yùn)行,但是運(yùn)行結(jié)果卻不是預(yù)想的結(jié)果,那就是因?yàn)樵创a中存在有邏輯錯(cuò)誤。
要想清除程序中的邏輯錯(cuò)誤,就必須學(xué)會(huì)使用開(kāi)發(fā)環(huán)境中的調(diào)試工具,并觀察變量的數(shù)值變化,加上自己的邏輯思考,才能找出程序中的錯(cuò)誤所在并修改清除之。
Dev-C++提供了強(qiáng)大的排錯(cuò)與調(diào)試工具,下面簡(jiǎn)要介紹具體使用方法。
在使用調(diào)試功能之前,請(qǐng)注意應(yīng)該選擇含用“調(diào)試”的編譯器配置方案(見(jiàn)上一節(jié)的說(shuō)明)。
Dev-C++ 沒(méi)有單獨(dú)的“調(diào)試”菜單,只是在“運(yùn)行[R]”菜單下面有幾個(gè)菜單項(xiàng)與調(diào)試有關(guān):“切換斷點(diǎn) F4”、“調(diào)試 F5”、“停止運(yùn)行 F6”。同時(shí)在工具欄上有 “調(diào)試 F5”、“停止運(yùn)行 F6”按鈕。讀者需要了解這幾個(gè)菜單和按鈕,然后按下述步驟進(jìn)行操作。
1.開(kāi)始調(diào)試(Debug)
點(diǎn)擊工具欄上的“調(diào)試”按鈕(快捷鍵 F5),或點(diǎn)擊菜單“運(yùn)行 –> 調(diào)試 F5”即可開(kāi)始調(diào)試。
如果當(dāng)前選定的編譯器配置方案中不含有調(diào)試信息,Dev-C++ 會(huì)彈出對(duì)話(huà)框提示說(shuō)沒(méi)有調(diào)試信息,不能啟動(dòng)調(diào)試。請(qǐng)點(diǎn)擊“確定”按鈕,然后重新選擇帶有“調(diào)試”的編譯器配置方案,再重新進(jìn)行編譯和調(diào)試。
程序調(diào)試時(shí),就開(kāi)始運(yùn)行(通常會(huì)彈出一個(gè)終端窗口)。運(yùn)行到到程序中的第1條可執(zhí)行語(yǔ)句就暫停。這時(shí)候醉好是手工調(diào)整一下 Dev-C++ 窗口的大小和位置,以便能夠同時(shí)看到 Dev-C++ 窗口和終端窗口(以方便后續(xù)操作)。
2. 調(diào)試過(guò)程中的操作
啟動(dòng)調(diào)試之后, Dev-C++ 窗口下半部分時(shí)會(huì)自動(dòng)顯示調(diào)試面板(下圖),可以用鼠標(biāo)點(diǎn)擊按鈕或按快捷鍵執(zhí)行調(diào)試操作。其中重要的是“下一行”按鈕(F7)和“單步進(jìn)入”按鈕(F8)。在簡(jiǎn)單的只含有一個(gè) main 函數(shù)的程序中,這兩個(gè)按鈕的功能是相同的,沒(méi)有區(qū)別。而在含有多個(gè)自定義函數(shù)的程序中,這兩個(gè)功能有較大的區(qū)別:“下一步(F7)”是指把當(dāng)前語(yǔ)句作為一步執(zhí)行完畢,而“單步進(jìn)入(F8)”是指如果當(dāng)前語(yǔ)句中含有函數(shù)調(diào)用則追蹤進(jìn)入到函數(shù)中去執(zhí)行。
如果調(diào)用函數(shù)是標(biāo)準(zhǔn)函數(shù)或你認(rèn)為無(wú)誤的函數(shù),就用“下一步”執(zhí)行(以免追蹤進(jìn)入),對(duì)于懷疑有問(wèn)題的函數(shù)才用“單步進(jìn)入”去追蹤。如果一不小心進(jìn)入了標(biāo)準(zhǔn)函數(shù)(例如 printf 函數(shù)或“cout << endl;”輸出),則點(diǎn)擊“跳出函數(shù)”以返回。
(一個(gè)常見(jiàn)問(wèn)題:有時(shí)候在 Dev-C++ 中調(diào)試 C++ 程序時(shí),遇到形如“cout << endl;”這樣的語(yǔ)句就會(huì)卡住無(wú)法繼續(xù)。這時(shí)請(qǐng)停止調(diào)試,然后點(diǎn)擊菜單“工具”下的“編譯選項(xiàng)”,在當(dāng)前選定的編譯器配置方案下,在“代碼生成/優(yōu)化”下的“代碼優(yōu)化”標(biāo)簽頁(yè)中,為“優(yōu)化級(jí)別(-O)”選擇一個(gè)合理的值,例如“Debug(g)”或“Med”都可以。確定。然后再重新編譯和調(diào)試。)
3. 查看變量的值
開(kāi)始調(diào)試后,常常有必要查看變量的變化情況,因此需要查看變量的值。在默認(rèn)情況下,如果用鼠標(biāo)懸浮在當(dāng)前運(yùn)行的代碼中的變量上方,則會(huì)自動(dòng)出現(xiàn)一個(gè)小懸浮窗口,顯示出該變量當(dāng)前的值。
如果想更快速地看到變量的值,可以在編輯器中選中待查看的變量名,在 Dev-C++ 窗口下方的調(diào)試面板中點(diǎn)擊“添加查看”按鈕,就可以在 Dev-C++ 窗口左邊的“調(diào)試”窗格中看到該變量及其當(dāng)前的值。(如果未選中變量名而點(diǎn)擊該按鈕,就會(huì)彈出對(duì)話(huà)框讓用戶(hù)輸入待查看的變量名)
4.設(shè)置斷點(diǎn)(Break point)
如果程序比較長(zhǎng),那么在調(diào)試過(guò)程中使用“下一步”按鈕(F7)和“單步進(jìn)入”按鈕(F8)進(jìn)行操作時(shí)比較慢??梢栽诔绦蛑性O(shè)置斷點(diǎn),加快調(diào)試操作速度。
在事先對(duì)程序的運(yùn)行出錯(cuò)現(xiàn)象進(jìn)行思考之后,可以推斷出程序出錯(cuò)的可能原因在于源代碼中的哪些語(yǔ)句。無(wú)論是在編輯狀態(tài)還是在調(diào)試過(guò)程中,可以把光標(biāo)移動(dòng)到想要暫停執(zhí)行的那一行,用鼠標(biāo)點(diǎn)擊該行左邊的裝訂區(qū)位置中的行號(hào)(或者按 F4 鍵),該行就會(huì)變成紅色,裝訂區(qū)的行號(hào)處顯示有一個(gè)紅點(diǎn),表示該行已被設(shè)置為一個(gè)斷點(diǎn)。再次操作則取消該行為斷點(diǎn)。
請(qǐng)?jiān)谧约簯岩捎袉?wèn)題的部分前后設(shè)置幾個(gè)斷點(diǎn),以便進(jìn)行調(diào)試。程序中可以設(shè)置多個(gè)斷點(diǎn)。
如果程序中設(shè)置了斷點(diǎn),那么在啟動(dòng)調(diào)試時(shí)會(huì)直接運(yùn)行到第1個(gè)斷點(diǎn)(而不是第1條可執(zhí)行語(yǔ)句)暫停。這時(shí)仍然可以用“下一步”按鈕(F7)和“單步進(jìn)入”按鈕(F8)進(jìn)行操作。如果認(rèn)為程序中某一部分無(wú)誤,則點(diǎn)擊“繼續(xù)”按鈕就會(huì)以運(yùn)行到下一個(gè)斷點(diǎn)暫停,無(wú)斷點(diǎn)則運(yùn)行到程序末尾。
5.根據(jù)調(diào)試情況排錯(cuò)
在調(diào)試過(guò)程中,要靈活運(yùn)用“下一步”(F7)和“單步進(jìn)入”(F8),并隨時(shí)查看變量的值,然而在頭腦中進(jìn)行分析,從而判斷程序中是否存在邏輯錯(cuò)誤。
在調(diào)試中途或醉后需要按“停止執(zhí)行”(F6)以結(jié)束調(diào)試。然后根據(jù)調(diào)試過(guò)程中的思考結(jié)果對(duì)程序進(jìn)行修改。通常需要反復(fù)進(jìn)行調(diào)試和修改才能排除程序中的錯(cuò)誤。
以上就是對(duì) Dev-C++ 的功能簡(jiǎn)要介紹。讀者也可以閱讀 Dev-C++ 的詳細(xì)用戶(hù)手冊(cè)(英文)。
下面是簡(jiǎn)單地介紹相關(guān)示例程序和項(xiàng)目開(kāi)發(fā)功能。
示例程序
在 Dev-C++ 安裝目錄下的 Example 目錄下提供了一些示例程序,可供初學(xué)者參考學(xué)習(xí):
hello.c 和 hello.cpp :經(jīng)典的輸出“Hello, World!”字符串的簡(jiǎn)單程序。分別為 C 語(yǔ)言版本和 C++ 版本。
leapyear.c 和 leapyear.cpp :輸入一個(gè)表示年份的數(shù)字,判斷是否閏年。分別為 C 語(yǔ)言版本和 C++ 版本。
perfectnum.cpp :輸入一個(gè)整數(shù),檢查它是否為完數(shù)(所有真因數(shù)之和正好等于這個(gè)數(shù))。
fibonacci.cpp :輸出 Fibonacci 數(shù)列的前 30 項(xiàng),用數(shù)組方式實(shí)現(xiàn)。
winmain.cpp :通過(guò)使用 Windows API(應(yīng)用程序接口) 函數(shù)編寫(xiě)的點(diǎn)擊按鈕之后彈出對(duì)話(huà)框輸出“Hello, Windows!”。
snakegame.cpp :字符界面的貪吃蛇游戲(主要是標(biāo)準(zhǔn) C 語(yǔ)言實(shí)現(xiàn)的,少量地使用了 Windows API 函數(shù))。
EGE-FiveStarFlag.cpp :使用 EGE 圖形庫(kù)(一個(gè)面向初學(xué)者的免費(fèi)開(kāi)源函數(shù)庫(kù))編寫(xiě)的圖形界面程序,繪制五星紅旗。
EGE-RandomLines.cpp :使用 EGE 圖形庫(kù)編寫(xiě)的圖形界面程序,隨機(jī)地繪制折向的線(xiàn)條,并以端點(diǎn)為圓心繪制圓形。
項(xiàng)目開(kāi)發(fā)
Dev-C++ 不僅支持單文件開(kāi)發(fā)(適合大部分初學(xué)者),還支持以項(xiàng)目形式的多文件開(kāi)發(fā)。
點(diǎn)擊菜單“文件 > 新建... > 項(xiàng)目”,或點(diǎn)擊工具欄上的“新建...”按鈕再點(diǎn)擊“項(xiàng)目”,就可以打開(kāi)“新建項(xiàng)目”對(duì)話(huà)框。該對(duì)話(huà)框中按照“基本”、“多媒體”、“Windows”和“終端窗口”四類(lèi)提供了多種項(xiàng)目模板,可供用戶(hù)從中選擇合適的項(xiàng)目模板,開(kāi)始自己的項(xiàng)目開(kāi)發(fā)。例如,在“基本”類(lèi)別中包含了“Windows應(yīng)用程序”、“終端窗口應(yīng)用程序”、“靜態(tài)庫(kù)”和“動(dòng)態(tài)庫(kù)”等,而在“多媒體”類(lèi)別下面提供了分別使用 Direct3D、EGE 和 OpenGL 三種圖形函數(shù)庫(kù)進(jìn)行圖形編程的模板。
在使用項(xiàng)目方式進(jìn)行多文件開(kāi)發(fā)時(shí),編輯窗口左邊的“項(xiàng)目”窗格提供了相應(yīng)的項(xiàng)目組織功能。