7.2.2 Things which are extra

Here we give a list of things which are possible in Free Pascal, but which didn’t exist in Turbo Pascal or Delphi.

1.
Free Pascal functions can also return complex types, such as records and arrays.
2.
In Free Pascal, you can use the function return value in the function itself, as a variable. For example:
     function a : longint;
     
     begin
        a:=12;
        while a>4 do
          begin
             {...}
          end;
     end;

The example above would work with TP, but the compiler would assume that the a>4 is a recursive call. If a recursive call is actually what is desired, you must append () after the function name:

     function a : longint;
     
     begin
        a:=12;
        { this is the recursive call }
        if a()>4 then
          begin
             {...}
          end;
     end;

3.
In Free Pascal, there is partial support of Delphi constructs. (See the Programmer’s Guide for more information on this).
4.
The Free Pascal exit call accepts a return value for functions.
     function a : longint;
     
     begin
        a:=12;
        if a>4 then
          begin
             exit(a*67); {function result upon exit is a*67 }
          end;
     end;

5.
Free Pascal supports function overloading. That is, you can define many functions with the same name, but with different arguments. For example:
     procedure DoSomething (a : longint);
     begin
     {...}
     end;
     
     procedure DoSomething (a : real);
     begin
     {...}
     end;

You can then call procedure DoSomething with an argument of type Longint or Real.
This feature has the consequence that a previously declared function must always be defined with the header completely the same:

     procedure x (v : longint); forward;
     
     {...}
     
     procedure x;{ This will overload the previously declared x}
     begin
     {...}
     end;

This construction will generate a compiler error, because the compiler didn’t find a definition of procedure x (v : longint);. Instead you should define your procedure x as:

     procedure x (v : longint);
     { This correctly defines the previously declared x}
     begin
     {...}
     end;

The command line option -So (see page 129) disables overloading. When you use it, the above will compile, as in Turbo Pascal.

6.
Operator overloading. Free Pascal allows operator overloading, e.g. you can define the ’+’ operator for matrices.
7.
On FAT16 and FAT32 systems, long file names are supported.