[Overview][Constants][Types][Classes][Procedures and functions][Variables][Index] | Reference for unit 'System' (#rtl)

# Exit

Exit current subroutine.

## Declaration

Source position: system.fpd line 43

`procedure Exit(`
`const X: TAnyType`
`); procedure Exit;`

## Description

Exit exits the current subroutine, and returns control to the calling routine. If invoked in the main program routine, exit stops the program. The optional argument X allows to specify a return value, in the case Exit is invoked in a function. The function result will then be equal to X.

In Object Pascal or Delphi modes, if the Exit statement is surrounded by one or more Try .. Finally constructs, the Finally blocks are executed, which means that if the finally blocks are used to free resources, then these resources will also be freed when Exit is called.

Note that although Exit is a compiler intrinsic (i.e. is treated specially) it is defined as an identifier in the system unit, hence it can be redefined.

## Errors

None.

## See also

Halt |  | Stop program execution.

## Example

    Program Example21;

    { Program to demonstrate the Exit function. }

    Procedure DoAnExit (Yes : Boolean);

    { This procedure demonstrates the normal Exit }

    begin
      Writeln ('Hello from DoAnExit !');
      If Yes then
        begin
        Writeln ('Bailing out early.');
        exit;
        end;
      Writeln ('Continuing to the end.');
    end;

    Function Positive (Which : Integer) : Boolean;

    { This function demonstrates the extra FPC feature of Exit :
      You can specify a return value for the function }

    begin
      if Which>0 then
        exit (True)
      else
        exit (False);
    end;

    begin
      { This call will go to the end }
      DoAnExit (False);
      { This call will bail out early }
      DoAnExit (True);
      if Positive (-1) then
        Writeln ('The compiler is nuts, -1 is not positive.')
      else
        Writeln ('The compiler is not so bad, -1 seems to be negative.');
    end.

## Example

    {
      Example 121:
      Continue, break and exit are system procedures.
      They can be redefined
    }

    procedure continue;

    begin
      Writeln('Continue');
    end;

    Procedure Exit;

    begin
      Writeln('exit');
    end;

    Procedure Break;

    begin
      Writeln('Break');
    end;

    begin
      Repeat
        Continue;
        Break;
        exit;
      Until True;
    end.