|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Termination-Handler Syntax
The try and finally keywords are used to construct a termination handler. The following example shows the structure of a try-finally termination handler.
try { // guarded body of code } finally { // finally block }
As with the try-except statement, both the try block and the finally block require braces ({}), and using a goto statement to jump into either block is not permitted. The try block contains the guarded body of code that is protected by the termination handler. A function can have any number of try-finally statements, and these termination handling structures can be nested within the same function or in different functions.
The finally block is executed whenever the flow of control leaves the try block. However, the finally block is not executed if either the ExitProcess or ExitThread function is called from within the try block. If execution of the try block terminates because of an exception that invokes the exception-handling block of a frame-based exception handler, the finally block is executed before the exception-handling block is executed. Similarly, a call to the standard C longjmp function from the try block causes execution of the finally block before execution resumes at the target of the longjmp operation. If try block execution terminates due to a normal control statement (return, break, continue, or goto), the finally block is executed.
The AbnormalTermination function can be used within the finally block to determine whether the try block terminated sequentially ѕ that is, whether it reached the closing brace (}). Leaving the try block because of a call to longjmp, a jump to an exception handler, or a return, break, continue, or goto statement, is considered an abnormal termination. Note that failure to terminate sequentially causes the system to search backward through all stack frames to determine whether any termination handlers must be called. This can result in performance degradation due to the execution of hundreds of instructions.
Execution of the finally block can terminate by any of the following means.
· Execution of the last statement in the block and continuation to the next instruction · Use of a normal control statement (return, break, continue, or goto) · Use of longjmp or a jump to an exception handler
The finally block is executed in the context of the function in which the try-finally statement is located. This means that the finally block can access that function's local variables.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
СИНТАКСИС Termination-Handler
Попытка и наконец ключевые слова использованы, чтобы создавать вручителя завершения. Следующий пример показывает структуру попытки-наконец завершения вручителя.
попытка { // охраняющее тело кода } наконец { // наконец блок }
Как и попытка-кроме утверждения, как попытка блокируется и наконец блок требует скобы ({}), так и использование утверждения goto, чтобы прыгать в любой блока не разрешен. Пробовать блока содержит охраняющее тело кода, который защищен вручителем завершения. Функция может иметь любой номер попытки-наконец утверждений, и это завершение, обрабатывающее структуры может быть вложено в пределах той же функции или в других функциях.
Наконец блок выполнен всякий раз, когда поток управления оставляет пробовать блока. Тем не менее, наконец блок не выполнен если или ExitProcess или функция ExitThread названа из пробовать блока. Если выполнение пробовать блока завершается из-за исключения, которое вводит блока исключительной обработки фреймового исключительного вручителя, наконец блок выполнен прежде, чем блок исключительной обработки будет выполнен. Аналогично, вызов в стандарт C longjmp функция из пробовать блочного выполнения причин наконец блока прежде, чем выполнение продолжится на объекте действия longjmp. Если пробовать блочного выполнения завершается из-за нормального управляющего утверждения (возврат, сломайте, продолжайте, или goto), наконец блок выполнен.
Функция AbnormalTermination может быть использована в пределах наконец блока, чтобы определять завершало пробовать блока последовательно U то есть, достигло оно закрытия скобы (}). Оставляя пробовать блока из-за вызова на longjmp, прыжок на исключительный вручителя, или возврат, сломайте, продолжайте, или goto утверждение, считайтесь аварийным завершением. Отметьте, что невозможнось завершать последовательно заставляет систему, чтобы искать назад через все фреймы кипы, чтобы определять, что независимо любые вручители завершения должны быть названы. Это может закончиться разложением исполнения из-за выполнения сотен инструкций.
Выполнение наконец блока может завершиться любым из следующего средств.
Выполнение последнего утверждения в блоке и продолжении в следующую инструкцию Использование нормального управляющего утверждения (возврат, прерывание, продолжает, или goto) Использование longjmp или прыжка на исключительный вручителя
Наконец блок выполнен в контексте функции в которой попытка-наконец утверждение расположена. Это означает, что наконец блок может иметь доступ к этим функциональным локальным переменным.
|
|
|
|
| |