程序的調試

三類:

編譯時錯誤

編譯器只能翻譯語法正確的程序,否則將導致編譯失敗,無法生成可執行文件。對於自然語言來說,一點語法錯誤不是很嚴重的問題,因爲我們仍然可以讀懂句子。而編譯器就沒那麼寬容了,只要有哪怕一個很小的語法錯誤,編譯器就會輸出一條錯誤提示信息然後罷工,你就得不到你想要的結果。雖然大部分情況下編譯器給出的錯誤提示信息就是你出錯的代碼行,但也有個別時候編譯器給出的錯誤提示信息幫助不大,甚至會誤導你。在開始學習編程的前幾個星期,你可能會花大量的時間來糾正語法錯誤。等到有了一些經驗之後,還是會犯這樣的錯誤,不過會少得多,而且你能更快地發現錯誤原因。等到經驗更豐富之後你就會覺得,語法錯誤是最簡單最低級的錯誤,編譯器的錯誤提示也就那麼幾種,即使錯誤提示是有誤導的也能夠立刻找出真正的錯誤原因是什麼。相比下面兩種錯誤,語法錯誤解決起來要容易得多。

運行時錯誤

編譯器檢查不出這類錯誤,仍然可以生成可執行文件,但在運行時會出錯而導致程序崩潰。對於我們接下來的幾章將編寫的簡單程序來說,運行時錯誤很少見,到了後面的章節你會遇到越來越多的運行時錯誤。讀者在以後的學習中要時刻注意區分編譯時和運行時(Run-time)這兩個概念,不僅在調試時需要區分這兩個概念,在學習C語言的很多語法時都需要區分這兩個概念,有些事情在編譯時做,有些事情則在運行時做。

邏輯錯誤和語義錯誤

第三類錯誤是邏輯錯誤和語義錯誤。如果程序裏有邏輯錯誤,編譯和運行都會很順利,看上去也不產生任何錯誤信息,但是程序沒有幹它該乾的事情,而是幹了別的事情。當然不管怎麼樣,計算機只會按你寫的程序去做,問題在於你寫的程序不是你真正想要的,這意味着程序的意思(即語義)是錯的。找到邏輯錯誤在哪需要十分清醒的頭腦,要通過觀察程序的輸出回過頭來判斷它到底在做什麼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章