例外處理的時機: 摘要
終止處理常式會執行不論如何__try陳述式區塊結束。 原因包括跳出__try區塊中, longjmp區塊中,及回溯堆疊的例外處理受限於控制權的陳述式。
![]() |
---|
Visual C++ 支援兩種形式的setjmp和longjmp陳述式。快速的版本會略過終止的處理,但更有效率。若要使用這一版,包含 SETJMP 的檔案。H.如前一段所述,另一個版本會支援終止的處理。若要使用這一版,包含 SETJMPEX 的檔案。H.快速版本的效能增加硬體設定而定。 |
任何其他可執行程式碼,包括例外處理常式的主體之前,作業系統會執行所有終止處理常式以適當的順序。
例外狀況中斷的原因時,系統必須先決定要結束前執行一或多個例外狀況處理常式中篩選條件的部分。 事件的順序為:
就會引發例外狀況。
系統會查看使用中的例外處理常式的階層架構,並執行處理常式的篩選器具有高優先順序。 這是最新安裝,而且巢狀最深層,在 [區塊] 和 [函式呼叫中的條款,例外處理常式。
如果此篩選器會將 (會傳回 0) 的控制權,直到篩選器找到未通過控制項,也將會繼續處理程序。
如果此篩選器會傳回 – 1,其中的例外狀況,而沒有終止發生,也將會繼續執行。
如果篩選傳回 1,則發生下列事件:
系統會回溯堆疊上,清除所有目前正在執行的程式碼 (其中引發例外狀況) 和包含控制的例外狀況處理常式的堆疊框架之間的堆疊框架。
堆疊回溯時,便會執行在堆疊上的每個終止處理常式。
本身的例外狀況處理常式會執行。
控制項在結束之後,這個例外狀況處理常式就會傳遞至下一行程式碼。