# EXIT
> [HTML Version](exit.htm)
__
A-Shell provides several different EXIT statements as described below.
EXIT
The EXIT statement may be used within a control structure ([FOR...NEXT](for_next_ctrl_struct.htm.md), [DO/WHILE/UNTIL](dowhileuntil.htm.md), [SWITCH](switch_ctrl_struct.htm.md), [FOREACH](foreach.htm.md)) to exit the structure, proceeding to the next statement following the end of the structure. For example:
DO WHILE A < B
...
IF TIME > 82800 EXIT \! exit loop after 11 PM
...
LOOP
EXITPROGRAM
The EXITPROGRAM statement causes an exit directly from a function or procedure, regardless of how nested, to a special label \$EXITPROGRAM in the main program, or to the END if the \$EXITPROGRAM label doesn't exist. Although this is effectively an unstructured GOTO, it handles the stack cleanup and provides an solution to the problem of how percolate the desire for a program exit up from a nested function to the top level.
The EXITPROGRAM token can also be used in a RESUME statement in place of EXITFUNCTION, EXITPROCEDURE, or \$EXIT...
RESUME EXITPROGRAM \{WITH\_ERROR \{N\}\}
RESUME \$EXITPROGRAM \{WITH\_ERROR \{N\}\} \! (equivalent)
EXITFUNCTION
EXITFUNCTION is used exclusively within functions to exit the routine and return to the caller. Note however that if the function contains an \$EXIT label, then EXITFUNCTION becomes equivalent to GOTO \$EXIT, allowing for some final cleanup code to be executed and even opening the possibility of canceling the exit and jumping to some other place within the current function.
**See Also **
• EXITPROCEDURE
_Written February 2024_
EXITPROCEDURE
EXITPROCEDURE is used exclusively within procedures to exit the procedure and return to the caller. Note however that if the procedure contains an \$EXIT label, then EXITPROCEDURE becomes equivalent to GOTO \$EXIT, allowing for some final cleanup code to be executed and even opening the possibility of canceling the exit and jumping to some other place within the current procedure.
**See Also **
• EXITFUNCTION