Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Específico de Microsoft
La try-finally instrucción es una extensión de Microsoft para el lenguaje C que permite a las aplicaciones garantizar la ejecución del código de limpieza cuando se interrumpe la ejecución de un bloque de código. La limpieza consta de tareas como desasignar memoria, cerrar archivos y liberar identificadores de archivo. La try-finally instrucción es especialmente útil para las rutinas que tienen varios lugares donde se realiza una comprobación para un error que podría provocar un retorno prematuro de la rutina.
try-finally-statement:
__trycompound-statement__finallycompound-statement
La instrucción compuesta después de la __try cláusula es la sección protegida. La instrucción compuesta después de la __finally cláusula es el controlador de terminación. El controlador especifica un conjunto de acciones que se ejecutan cuando se cierra la sección protegida. No importa si la sección protegida sale por una excepción (terminación anómala) o por caída estándar (terminación normal).
El control alcanza una instrucción mediante una __try ejecución secuencial simple (cae a través). Cuando el control entra en la __try instrucción , su controlador asociado se activa. La ejecución continúa de la siguiente manera:
Se ejecuta la sección protegida.
Se invoca el controlador de terminación.
Cuando se completa el controlador de terminación, la ejecución continúa después de la
__finallyinstrucción . Independientemente de cómo finalice la sección protegida (por ejemplo, a través de unagotoinstrucción fuera del cuerpo protegido o a través de unareturninstrucción), el controlador de terminación se ejecuta antes de que el flujo de control salga de la sección protegida.
La __leave palabra clave es válida dentro de un try-finally bloque de instrucciones. El efecto de __leave es saltar al final del try-finally bloque. El controlador de terminación se ejecuta inmediatamente. Aunque se puede usar una goto instrucción para lograr el mismo resultado, una goto instrucción provoca el desenredado de la pila. La __leave instrucción es más eficaz porque no implica el desenredado de la pila.
La salida de una try-finally instrucción mediante una return instrucción o la longjmp función en tiempo de ejecución se considera una terminación anómala. No es legal saltar a una __try declaración, pero legal para salir de una. Se deben ejecutar todas las __finally instrucciones activas entre el punto de salida y el destino. Se denomina desenredado local.
No se llama al controlador de terminación si se elimina un proceso mientras se ejecuta una try-finally instrucción .
Nota:
El control de excepciones estructurado funciona con archivos de código fuente de C y C++. Sin embargo, no está diseñado específicamente para C++. En el caso de los programas portátiles de C++, el control de excepciones de C++ debe usarse en lugar de un control estructurado de excepciones. Además, el mecanismo de control de excepciones de C++ es mucho más flexible, ya que puede controlar excepciones de cualquier tipo. Para obtener más información, vea Control de excepciones en la referencia del lenguaje C++.
Consulte el ejemplo de la try-except instrucción para ver cómo funciona la try-finally instrucción.
END específico de Microsoft