導航:首頁 > 源碼編譯 > 編譯時異常怎麼發現

編譯時異常怎麼發現

發布時間:2022-09-12 11:28:42

編譯時異常

當你在編輯時想讓調用者知道他傳達的值是錯的你就拋一個編輯時異常,讓他預先做處理,你不處理你編輯就不能通過。在拋異常的方法中寫一個聲明 throws Exception
上面其實是處理異常的一種方案,聲明異常。還有一種方案就是捕獲異常

通過try,catch來進行異常的內部消化。

總結:
什麼時候使用捕獲,什麼時候使用聲明:

首先明確自己到底是功能的定義者還是功能的調用者。

如果我們是功能的定義者,在我們的功能中有異常發生,而這個異常不需要告訴給調用者,這時就要在自己的功能中必須把這個捕獲調用。
如果這個問題需要告訴調用者,這時就可以在方法上使用throws關鍵字把異常聲明出去。

功能的調用者:我們調用別人的程序,由於別人的程序發生了問題,自己在調用的時候,就需要提前給出處理方案,而java對異常的處理方案僅有2種,
捕獲和聲明。如果這個問題在我們自己的程序能夠處理掉就不要再使用聲明,而發自己依然要把這個問題往外暴漏,那麼就可以使用聲明

❷ 用Keil編程序時編譯有錯誤,怎麼才能知道錯誤是什麼呢

每個錯誤都有自己的標號,你可以根據標號在keil提供的幫助文件中搜索有關的詳細內容,按下F1會彈出幫助文檔,文檔都是英文寫的。
另外你雙擊錯誤時游標會自動跳到keil認為的錯誤行,實際錯誤就在那一行的附近
或者你可以把你的錯誤放在網路裡面搜一搜,一般都會得到。

❸ 簡要描述一下編譯期異常和運行時異常

編譯器異常就是你編譯的時候 編譯器報的錯誤,會自動提示;
運行時異常是程序運行的時候發生的異常,比如空指針,超出界限等,可以通過try catch捕捉到的

❹ 程序編譯錯誤不知道是什麼原因

不能通編譯過的程序實際上還不是合法的程序,因為它不滿足C語言對於程序的基本要求。

檢查語法錯誤的第一要義:集中力量檢查系統發現的第一個錯誤,弄清並改正它。

在編譯過程中系統發現的錯誤主要有兩類:基本語法錯誤和上下文關系錯誤。這些錯誤都在表面上,可以直接看得見。也是比較容易弄清,比較容易解決的。關鍵是需要熟悉C語言的語法規定和有關上下文關系的規定,按照這些規定檢查程序正文,看看存在什麼問題。

編譯中系統發現錯誤都能指出錯誤的位置。不同系統在這方面的能力有差異,在錯誤定位的准確性方面有所不同。有的系統只能指明發現錯誤的行,有的系統還能夠指明行內位置。

一般說,系統指明的位置未必是真實錯誤出現的位置。通常情況是錯誤出現在前,而系統發現錯誤在後,因為它檢查到實際錯誤之後的某個地方,才能確認出了問題,因此報出錯誤信息。要確認第一個錯誤的原因,應該從系統指明的位置開始,在那裡檢查,並從那裡開始向前檢查。

系統的錯誤信息中都包含一段文字,說明它所認定的錯誤原因。應該仔細閱讀這段文字,通常它提供了有關錯誤的重要線索。但也應該理解,錯誤信息未必准確,有時錯誤確實存在,但系統對錯誤的解釋也可能不對。也就是說,在查找錯誤時,既要重視系統提供的錯誤信息,又不應為系統的錯誤信息所束縛。

發現了問題,要想清楚錯誤的真正原因,然後再修改。不要蠻干。在這時的最大誘惑就是想趕快改,看看錯誤會不會消失。但是蠻乾的結果常常是原來的錯誤沒有弄好,又搞出了新的錯誤。

另一個值得注意的地方:程序中的一個語法錯誤常常導致編譯系統產生許多錯誤信息。如果你改正了程序中一個或幾個錯誤,下面的弄不清楚了,那麼就應該重新編譯。改正一處常常能消去許多錯誤信息行。

解決語法錯誤

常見語法錯誤:

1)缺少語句、聲明、定義結束的分號。

2)某種括弧不配對。C語言中括弧性質的東西很多,列舉如下:
( ), [ ], { }, ' ', " ", /* */
在不同位置的括弧不配對可能引起許多不同的錯誤信息。

3)關鍵字拼寫錯誤。

較難認定的典型錯誤:

1)宏定義造成的錯誤。這種東西不能在源程序文件中直接看到,是在宏替換之後出現的。常見的能引起語法錯誤的宏定義錯誤:宏定義中有不配對的括弧,宏定義最後加了不該有的分號,……

解決上下文關系錯誤

1)變數沒有定義。產生這個問題的原因除了變數確實沒有大意外,還可能是變數的拼寫錯誤,變數的作用域問題(在不能使用某個變數的地方想去用那個變數)。

2)變數重復定義。例如在同一個作用域里用同樣名字定義了兩個變數,函數的局部變數與參數重名等。

3)函數的重復定義。可能是用同一個名字定義了兩個不同的函數。或者是寫出的函數原型在類型上與該函數的定義不相符。有時沒有原型而直接寫函數調用也可能導致這種錯誤信息,因為編譯程序在遇到函數調用而沒有看到函數原型或函數定義時,將給函數假定一個默認原型。如果後來見到的函數定義與假定不符,就會報告函數重復定義錯誤。

4)變數類型與有關運算對運算對象或者函數對參數的要求不符。例如有些運算(如 %)要求整數參數,而你用的是某種浮點數。

5)有些類型之間不能互相轉換。例如你定義了一個結構變數,而後要用它給整數賦值。系統容許的轉換包括:數值類型之間的轉換,整數和指針之間的轉換,指針之間的轉換。其餘轉換(無論是隱含的,還是寫出強制)都不允許。參見《C語言程序設計》(K&R)197-199頁。

如何看待編譯警告

當編譯程序發現程序中某個地方有疑問,可能有問題時就會給出一個警告信息。警告信息可能意味著程序中隱含的大錯誤,也可能確實沒有問題。對於警告的正確處理方式應該是:盡可能地消除之。對於編譯程序給出的每個警告都應該仔細分析,看看是否真的有問題。只有那些確實無問題的警告才能放下不管。

注意:經驗表明,警告常常意味著嚴重的隱含錯誤。

常見警告:

1)(局部自動)變數沒有初始化就使用。如果對局部指針變數出現這種情況,後果不堪設想。對於一般局部自動變數,沒有初始化就使用它的值也不會是有意義的。

2)在條件語句或循環語句的條件中寫了賦值。大部分情況是誤將 == (等於判斷)寫成 = 了。這是很常見的程序錯誤,有些編譯程序對這種情況提出警告。

❺ 對於C語言編程出了錯,怎麼能快速找出錯誤呢

  1. 最直接的方法就是編譯,編譯後再按F4可以顯示錯誤信息及錯誤位置。

  2. 如果編譯通過,卻運行結果異常或不理想,往往是邏輯問題,請按順序檢查,如i++寫成i--,i++寫成j++,++i寫成i++,<=寫成<,有的變數一次循環後需要重新賦值清零,在循環末尾一定要寫上重新賦值語句。

❻ 數組的下標越界可在編譯哪個階段發現

1、運行的時候,這個屬於異常。

2、直接在開始編譯的時候,這個屬於錯誤了。

數組下標越界是一個程序初學者最容易犯的錯誤。

以一個簡單的一維數組為例:

int a[10];這是一個整型的數組a,有10個元素:a[0]-a[9],因為正確的下標應該是從0開始,到9結束,與生活習慣中的1-10不一樣,於是產生一個a[10]的錯誤,即數組下標越界。

c和c++語言中數組下標越界,編譯器是不會檢查出錯誤的,但是實際上後果可能會很嚴重,比如程序崩潰等,所以在日常的編程中,程序員應當養成良好的編程習慣,避免這樣的錯誤發生。

若編輯網頁時提示「數組下標越界」,除檢查下上述問題外,再檢查下文件中變數名稱是否一致,很多時候是變數名稱不一致所致

使用的角標大於等於數組的長度或為負數!

❼ 怎樣快速找到java編譯時的錯誤

不管開發工具是否智能,都要學會閱讀錯誤信息,
想要找出問題很簡單,通常報錯了之後,閱讀列印出來的錯誤信息,都是最重要的糾錯手段。
報錯了之後首先要看錯誤信息的第一行,那一行包含兩種信息,前面一段記錄的是錯誤的類型,比如說java.lang.NullPointerException 這里隨便貼了個空指針異常,這是錯誤類型,之後後面跟的是對這個錯誤信息的描述,一般是英文,這個錯誤信息的描述非常重要,他詳細的說明了這個錯誤出現的原因,接下來的一行一行的,是出現錯誤的位置 一般是這樣的
at xxx.xxx.xxx.Xxx 意思是在哪個哪個類的第多少多少行,但是為什麼會出現一堆呢,因為java的異常是可以層層上拋的,最開始報錯的地方位置,然後上一層的位置,然後再上一層的位置.....所以會顯示一堆,其實他只是個位置信息而已,不要被龐大的錯誤信息嚇著。呵呵

❽ 如何快速查找C語言編譯時的錯誤

1、首先,我們啟動編譯軟體程序,今天我們以VC++6.0為例。

注意事項:

編譯語言是一種以編譯器來實現的編程語言。它不像直譯語言一樣,由解釋器將代碼一句一句運行,而是以編譯器,先將代碼編譯為機器碼,再加以運行。理論上,任何編程語言都可以是編譯式,或直譯式的。它們之間的區別,僅與程序的應用有關。

❾ Java編程中 常見的異常有哪幾種

相信作為程序員的我們在對程序進行編譯過程中經常會遇到錯誤,或者在運行過程中出現錯誤,在這里主要跟大家談談經常遇到的一些異常與錯誤,以及解決辦法。

異常是指程序在編譯或運行過程出現的錯誤。

在java.lang包中Throwable包含了所有的異常。

Error (錯誤) 和Exception(異常)

(1)Error(錯誤)

一旦發生無法修復,但可以避免發生。

常見錯誤類:

IOError:I/O錯誤,當發生嚴重的I/O錯誤時,拋出此錯誤。
VirtualMachineError:虛擬機錯誤,當 Java 虛擬機崩潰或用盡了它繼續操作所需的資源時,拋出該錯誤。

StackOverflowError:棧內存滿了,當應用程序遞歸太深而發生堆棧溢出時,拋出該錯誤。

OutofMemoryError:堆內存滿了,因為內存溢出或沒有可用的內存提供給垃圾回收器時,Java 虛擬機無法分配一個對象,這時拋出該異常。

以上是一些常見的錯誤,在Error類中還有一些別的錯誤(參照文件Java.lang.Throwable.Error).

(2)Exception(異常)

一旦發生,可以捕獲並處理,不會導致程序終止,有時可以避免有時無法避免。

異常的分類:

1.編譯時異常(需要強制處理) 2.運行時異常(不需要強制處理)

常見的異常有:

IOException:輸入輸出流異常
FileNotFoundException:文件找不到的異常
ClassNotFoundException:類找不到的異常
DataFormatException:數據格式化異常
NoSuchFieldException:沒有匹配的屬性異常
NoSuchMethodException:沒有匹配的方法異常

SQLException:資料庫操作異常
TimeoutException:執行超時異常

常見的運行時異常:

RuntimeException:運行時異常
NullPointerException:空指針異常

:數組越界異

ClassCastException:類型轉換異常
IllegalArgumentException:非法的參數異常
InputMismatchException:輸入不匹配

以上是常見的一些異常,另外還有別的異常,參見文件:Java.lang.Throwable.Exception

既然我們常常會遇到一些異常,那我們如何來處理這些異常就是一個急需解決的事情。

(1) 如何處理編譯時異常?

方法一:將需要處理的代碼塊放在一個try...catch...中
try{
//需要處理異常的代碼
}catch(XXXException ef){
ef.printStackTrace();
}

我們方法一就是要將我們不確定的代碼放入try......catch中,先進行try一下,如果沒有異常,則不會觸發catch,沒有輸出,一旦出現異常,那麼catch就會工作,在catch中捕獲異常信息,根據異常信息進行補救措施。

如以下代碼:

從結果可以看出,我們在輸入數據的時候出現錯誤,這樣通過自定義異常能夠讓我們更直接快速的找到運行或編譯時的異常。

在上述中我們分別提到了三種throw,分別是Throwable,Throws以及throw,那麼到底三者有什麼區別?

Throwable:是指在在Java.lang包中的一個類,其包含了所有的異常和錯誤,其中類Error和Exception 是它

的子類。

Thows:是指在解決編譯時異常,將方法中異常拋給上一級,在方法後面要加Throw Exception來進行拋。

throw:是指在自定義異常時,如果方法出現異常,那麼將作為引用方法的對象拋出。即拋出異常。

希望對您有所幫助!~

❿ 編譯時異常和運行時異常怎麼理解,怎麼區分兩者

編譯錯誤,一般是語法上存在問題,編譯過不去; 運行錯誤,是指程序在運行過程中出現錯誤,只能說是程序存在一定的邊界bug; 編譯錯誤一般是指java語法的錯誤,運行錯誤分兩種一種是error還有就是Exception 有的異常是拋出但可繼續執行之後的代碼

閱讀全文

與編譯時異常怎麼發現相關的資料

熱點內容
卡爾曼濾波演算法書籍 瀏覽:763
安卓手機怎麼用愛思助手傳文件進蘋果手機上 瀏覽:840
安卓怎麼下載60秒生存 瀏覽:799
外向式文件夾 瀏覽:232
dospdf 瀏覽:428
怎麼修改騰訊雲伺服器ip 瀏覽:382
pdftoeps 瀏覽:489
為什麼鴻蒙那麼像安卓 瀏覽:732
安卓手機怎麼拍自媒體視頻 瀏覽:183
單片機各個中斷的初始化 瀏覽:721
python怎麼集合元素 瀏覽:477
python逐條解讀 瀏覽:829
基於單片機的濕度控制 瀏覽:496
ios如何使用安卓的帳號 瀏覽:879
程序員公園采訪 瀏覽:807
程序員實戰教程要多長時間 瀏覽:970
企業數據加密技巧 瀏覽:132
租雲伺服器開發 瀏覽:809
程序員告白媽媽不同意 瀏覽:332
攻城掠地怎麼查看伺服器 瀏覽:597