instrucción try - final (c)
Específicos de Microsoft
La instrucción de try-finally es una extensión de Microsoft del lenguaje C que habilita las aplicaciones para garantizar la ejecución del código de limpieza cuando la ejecución de un bloque de código se interrumpe.Limpieza consta de las tareas como desasignando memoria, los archivos cerrados, y liberar los identificadores de archivos.La instrucción de try-finally es especialmente útil para las rutinas que tienen varios lugares donde una comprobación se crea para un error que puede causar retorno prematuro de la rutina.
intento-final-instrucción:
instrucción compuesta de __tryinstrucción compuesta de**__finally**
La instrucción compuesta después de la cláusula de __try es la sección guardada.la instrucción compuesta después de la cláusula de __finally es el controlador de terminación.El controlador especifica un conjunto de acciones que se ejecutan cuando se cierra la sección guardada, si la sección guardado sea salida por una excepción (terminación anormal) o por estándar fracase (finalización normal).
El Control alcanza una instrucción de __try por la ejecución secuencial simple (fracase).Cuando el control entra en la instrucción de __try , el controlador asociado hace activo.la ejecución continúa como sigue:
se ejecuta la sección guardada.
Se invoca el controlador de terminación.
cuando el controlador de terminación completa, la ejecución continúa después de la instrucción de __finally .Independientemente de cómo se ejecutan los extremos guardados de la sección (por ejemplo, mediante una instrucción de goto fuera del cuerpo guardado o mediante una instrucción de return ), el controlador de terminación antes de que el flujo de control sale de la sección guardada.
La palabra clave de __leave es válida dentro de un bloque de instrucciones de try-finally .El efecto de __leave es saltar al final del bloque de try-finally .Se ejecuta el controlador de terminación inmediatamente.Aunque una instrucción de goto se puede utilizar para lograr el mismo resultado, una instrucción de goto produce desenredo de la pila.La instrucción de __leave es más eficaz porque no implican desenredo de la pila.
Realiza una instrucción de try-finally mediante una instrucción return o la función en tiempo de ejecución de longjmp se considera terminación anormal.No es válido saltar en __try una instrucción, pero permite pasar de una.Todas las instrucciones de __finally activas entre el punto de salida y el destino se deben ejecutar.Esto se denomina “desenredo local”.
No se llama al controlador de terminación si se elimina un proceso mientras ejecuta una instrucción de try-finally .
[!NOTA]
El control estructurado de excepciones trabaja con archivos de código fuente de c y C++.Sin embargo, no está diseñado específicamente para C++.Puede asegurarse de que el código sea más portátil mediante el control de excepciones de C++.Además, el mecanismo de control de excepciones de C++ es mucho más flexible, ya que puede controlar las excepciones de cualquier tipo.
[!NOTA]
Para programas en C++, el control de excepciones de C++ se debería utilizar en lugar del control de excepciones estructurado.Para obtener más información, vea control de excepciones en la referencia del lenguaje C++.
Vea el ejemplo para intento-excepto la instrucción para ver cómo funciona la instrucción de try-finally .
Específico de Microsoft de FINAL