5.1.5 Options concerning the sources (language options)

For more information on these options, see Programmer’s Guide

-Mmode
Set language mode to mode, which can be one of the following:
delphi
Try to be Delphi compatible. This is more strict than the objfpc mode, since some Free Pascal extensions are switched off.
fpc
Free Pascal dialect (default).
macpas
Try to be compatible with Macintosh Pascal dialects.
objfpc
Switch on some Delphi extensions. This is different from Delphi mode, because some Free Pascal constructs are still available.
tp
Try to be TP/BP 7.0 compatible. This means no function overloading etc.
-Mfeature
Select language feature feature. As of FPC version 2.3.1, the -M command line switch can be used to select individual language features. In that case, feature is one of the following keywords:
CLASS
Use object pascal classes.
OBJPAS
Automatically include the ObjPas unit.
RESULT
Enable the Result identifier for function results.
PCHARTOSTRING
Allow automatic conversion of null-terminated strings to strings,
CVAR
Allow the use of the CVAR keyword.
NESTEDCOMMENTS
Allow use of nested comments.
CLASSICPROCVARS
Use classical procedural variables.
MACPROCVARS
Use mac-style procedural variables.
REPEATFORWARD
Implementation and Forward declaration must match completely.
POINTERTOPROCVAR
Allow silent conversion of pointers to procedural variables.
AUTODEREF
Automatic (silent) dereferencing of typed pointers.
INITFINAL
Allow use of Initialization and Finalization
POINTERARITHMETICS
Allow use of pointer arithmetic.
ANSISTRINGS
Allow use of ansistrings.
OUT
Allow use of the out parameter type.
DEFAULTPARAMETERS
Allow use of default parameter values.
HINTDIRECTIVE
Support the hint directives (deprecated, platform etc.)
DUPLICATELOCALS
?
PROPERTIES
Allow use of global properties.
ALLOWINLINE
Allow inline procedures.
EXCEPTIONS
Allow the use of exceptions.

The keyword can be followed by a plus or minus sign to enable or disable the feature.

-Rxxx
Specify what kind of assembler you use in your asm assembler code blocks. Here xxx is one of the following:
att 
asm blocks contain AT&T-style assembler. This is the default style.
intel
asm blocks contain Intel-style assembler.
default
Use the default assembler for the specified target.
direct
asm blocks should be copied as is in the assembler, only replacing certain variables.
-S2
Switch on Delphi 2 extensions (objfpc mode). Deprecated, use -Mobjfpc instead.
-Sa
Include assert statements in compiled code. Omitting this option will cause assert statements to be ignored.
-Sc
Support C-style operators, i.e. *=, +=, /= and -=.
-Sd
Try to be Delphi compatible. Deprecated, use -Mdelphi instead.
-SeN
The compiler stops after the N-th error. Normally, the compiler tries to continue compiling after an error, until 50 errors are reached, or a fatal error is reached, and then it stops. With this switch, the compiler will stop after the N-th error (if N is omitted, a default of 1 is assumed). Instead of a number, one of n, h or w can also be specified. In that case the compiler will consider notes, hints or warnings as errors and stop when one is encountered.
-Sg
Support the label and goto commands. By default these are not supported. You must also specify this option if you use labels in assembler statements. (if you use the AT&T style assember)
-Sh
Use ansistrings by default for strings. If this option is specified, the compiler will interpret the string keyword as an ansistring. Otherwise it is supposed to be a shortstring (TP style).
-Si
Support C++ style INLINE.
-SIXXX
Set interfaces style to XXX.
-Sk
Load the Kylix compatibility unit (fpcylix).
-Sm
Support C-style macros.
-So
Try to be Borland TP 7.0 compatible. Deprecated, use -Mtp instead.
-Ss
The name of constructors must be init, and the name of destructors should be done.
-St
Allow the static keyword in objects.
-Sx
Enable exception keywords (default in Delphi/Objfpc mode). This will mark all exception related keywords as keywords, also in Turbo Pascal or FPC mode. This can be used to check for code which should be mode-neutral as much as possible.
-Un
Do not check the unit name. Normally, the unit name is the same as the filename. This option allows them to be different.
-Us
Compile a system unit. This option causes the compiler to define only some very basic types.