爲什麼在編譯時而不是在運行時發現錯誤更好?我在這裏和其他地方搜索了相同的主題,但沒有找到合適的答案。爲什麼在編譯時而不是在運行時發現錯誤更好?
回答
這是一般事實,在軟件開發過程的早期,你發現漏洞更快/更容易/更便宜的它是解決這些問題。通常情況下,編譯器錯誤或警告指出您在問題所在的代碼中的確切位置,而在運行時定位錯誤通常會是一個更加冗長和費力的過程。此外,也可能是該錯誤在一段時間內沒有出現(「潛在」錯誤),因此您可能需要在未來某個時間花費額外的努力來提供客戶支持,運送軟件更新錯誤修復,應對造成名譽損失等
基本上,因爲編譯器每次編譯時間的推移,通過所有的代碼,它可以檢測到任何錯誤會自動在每個彙編找到。
發現錯誤運行時意味着你必須運行所有的代碼來檢測錯誤,這可能會非常棘手,尤其是有很多條件執行分支的代碼。另外,指出錯誤的確切位置可能非常棘手。
在它歸結爲儘快找到錯誤結束,這樣你就可以解決這些問題,而該代碼是在你的頭腦清新。
此外,添加到什麼@保羅r表示,編譯錯誤是「容易」的通知(你剛纔編譯代碼就萬事大吉了),而運行時錯誤可能是特定的使用情況,這可能會崩潰您的系統在部署時。想想衝擊...
有兩種類型的錯誤,編譯時間和運行時間。最好是,你希望你的錯誤發生在編譯時,因爲這些更容易診斷和糾正。
基本上編譯時錯誤意味着編寫的代碼不能建立,因爲有語法錯誤(打字錯誤)或類型錯誤(調用或使用錯誤的方式使用變量類型)等,編譯器無法繼續。儘管現在編譯器盡最大努力來識別所有類型的錯誤,甚至是潛在的運行時錯誤,因爲在編寫代碼時,與在調試過程中相反,它更便宜並且更少時間來糾正這些問題。通常情況下,在一個可以進行基本「運行時」分析的編譯器中,您將收到警告,這是編譯器告訴您它認爲您的代碼已被擡起的方式。它仍然建立在警告場景中,但警告總是您應該付費的東西。
發生運行時錯誤是因爲儘管代碼可能是正確的,但邏輯不是或編譯器無法在編譯過程中知道進入代碼的參數(認爲用戶輸入)。運行時錯誤的例子有無限循環,超出界限的錯誤,類型錯誤(當用戶輸入一個字符串時,要求輸入一個數字)以及其他許多錯誤。
底線是,只要我們能夠在產生錯誤時知道錯誤,而不是在完成之後,我們就可以讓代碼更加清晰和高效。我希望這有幫助。 :)
- 1. 爲什麼發生運行時錯誤而不是編譯錯誤?
- 2. SBT - 爲什麼運行時出現編譯錯誤?
- 3. 創建一個編譯錯誤,而不是運行時錯誤
- 4. 編程到接口而不是實現:爲什麼在運行時分配對象的具體實現更好?
- 5. 使用[]運算符時爲什麼會出現編譯錯誤?
- 6. 爲什麼發生運行時錯誤?
- 7. 爲什麼在使用printf時會出現運行時錯誤?
- 8. 爲什麼在用RXTX編譯J2ME代碼時出現錯誤?
- 9. 爲什麼在編譯Typescript時出現「Can not find module」錯誤?
- 10. 爲什麼我在編譯時出現以下錯誤:
- 11. 爲什麼在編譯Ruby 1.8.7中的IronRuby時出現錯誤?
- 12. 運行時異常沒有編譯錯誤。爲什麼?
- 13. 運行時錯誤和編譯器錯誤有什麼區別?
- 14. 爲什麼NDepend在命令行運行時顯示CQL錯誤,而不是GUI?
- 15. 爲什麼編譯器在進行「壞」轉換時不會發生錯誤?
- 16. 使用非Comparable類創建TreeSet:爲什麼運行時異常而不是編譯時錯誤?
- 17. 我應該在編譯時而不是運行時建立繼承嗎?如果是的話,爲什麼?在Perl
- 18. 添加引用時沒有編譯錯誤,但在編譯時發現錯誤
- 19. 爲什麼不@NotNull引發編譯時錯誤?
- 20. 爲什麼不編譯編譯錯誤?
- 21. 爲什麼在編譯單個語句錯誤時發現多個語句? (Python)
- 22. 當我從命令行編譯時,爲什麼會出現子集錯誤,但不是從IDE進行編譯?
- 23. 在jekyll scss編譯錯誤不顯示錯誤是什麼行
- 24. 編譯時間和運行時錯誤
- 25. 的Java鑄造導致運行時錯誤而不是編譯錯誤
- 26. 爲什麼不是「\ 400」編譯時錯誤?
- 27. 在調試器外運行時發佈編譯更改行爲
- 28. 爲什麼在運行rsync時出現此錯誤?
- 29. 爲什麼在運行.BAT文件時出現錯誤?
- 30. 爲什麼代碼在運行時會出現分段錯誤?
這是更快在編譯的時候做呢? – Tejs 2012-04-23 20:55:56