Free Pascal supports compiler directives in the source file: Basically the same directives as in Turbo Pascal, Delphi and Mac OS pascal compilers. Some are recognized for compatibility only, and have no effect.
A compiler directive is always specified as a comment using curly braces:
{$DIRECTIVE [value]}
The older (* *) notation, or the C++ notation // cannot be used for directives.
The fact that a directive is specified as a comment means that it is not a pascal instruction. That in turn means that if a non-existing directive is specified, the compiler does not give an error, it just gives a warning about an invalid/unknown directive.
There is a distinction between local and global directives:
Local directives take effect from the moment they are encountered till they are changed by another directive or the same directive with a different argument: they can be specified more than once in a source file.
Global directives have an effect on all of the compiled code. They can, in general, only be specified once per source file. It also means that their effect ends when the current unit is compiled; the effect does not propagate to another unit.
Some directives can only take a boolean value, which means a ’+’ to switch them on, or a ’-’ to switch them off. No space should be present between the boolean switch and the + or - sign. These directives are also known as switches. Many switches have a long form also. If they do, then the name of the long form is given also.
For long switches, the + or - character to switch the option on or off, may be replaced by the ON or OFF keywords. In that case, there must be a space between the directive name and the ON/OFF.
Thus {$I+}
is equivalent to {$IOCHECKS ON}
or {$IOCHECKS+}
and {$C-}
is equivalent to
{$ASSERTIONS OFF}
or {$ASSERTIONS-}
The long forms of the switches are the same as their Delphi counterparts.
It is worth mentioning that when defaults are indicated, this means defaults in the absence of a configuration file. The configuration files distributed with FPC will change some of the defaults mentioned here.