Macro AbnormalTermination
Indica si el bloque __try de un controlador de terminación terminó normalmente. Solo se puede llamar a la función desde dentro del bloque __finally de un controlador de terminación.
Nota
El compilador de optimización de Microsoft C/C++ interpreta esta función como una palabra clave y su uso fuera de la sintaxis de control de excepciones adecuada genera un error del compilador.
Sintaxis
BOOL AbnormalTermination(void);
Parámetros
Esta macro no tiene parámetros.
Valor devuelto
Si el bloque de __try terminó anómalamente, el valor devuelto es distinto de cero.
Si el bloque __try finaliza normalmente, el valor devuelto es cero.
Comentarios
El bloque __try finaliza normalmente solo si la ejecución deja el bloque secuencialmente después de ejecutar la última instrucción del bloque. Instrucciones (como return, goto, continue o break) que hacen que la ejecución deje el bloque __try dé lugar a una terminación anómala del bloque. Este es el caso incluso si dicha instrucción es la última instrucción del bloque __try .
La terminación anómala de un bloque de __try hace que el sistema busque hacia atrás en todos los marcos de pila para determinar si se debe llamar a cualquier controlador de terminación. Esto puede dar lugar a la ejecución de cientos de instrucciones, por lo que es importante evitar la terminación anómala de un bloque de __try debido a una instrucción return, goto, continue o break . Tenga en cuenta que estas instrucciones no generan una excepción, aunque la terminación sea anómala.
Para evitar la terminación anómala, la ejecución debe continuar hasta el final del bloque. También puede ejecutar la instrucción __leave . La instrucción __leave permite la finalización inmediata del bloque de __try sin causar una terminación anómala y su penalización de rendimiento. Compruebe la documentación del compilador para determinar si se admite la instrucción __leave .
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo compatible |
Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible |
Windows Server 2003 [solo aplicaciones de escritorio] |