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.
         
- 
     ISO 
- In this mode, the compiler complies with the requirements of level 0 and level 1
         of ISO/IEC 7185.
 
- 
-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
         
- 
     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 
- Allow method arguments with the same name as properties
         in classes.
         
- 
     PROPERTIES 
- Allow use of global properties.
         
- 
     ALLOWINLINE 
- Allow inline procedures.
         
- 
     EXCEPTIONS 
- Allow the use of exceptions.
         
- 
     OBJECTIVEC1 
- Allow the use of objective C version 1.
         
- 
     OBJECTIVEC2 
- Allow the use of objective C version 2.
         
- 
     NESTEDPROCVARS 
- Allow  assigning  local  procedures  to  nested  procedural
         variables and defining inline procedural variable types, which can always accept
         local procedures, in parameter declarations.
         
- 
     NONLOCALGOTO 
- Allow a GOTO statement to jump outside the local scope (as
         ISO Pascal).
         
- 
     ADVANCEDRECORDS 
- Allow   the   use   of   advanced   records   (records   with
         methods/properties)
         
- 
     ISOUNARYMINUS 
- Treat unary minus like in ISO Pascal: same precedence level
         as binary minus/plus.
 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.
     
- 
-Sf 
- Enable certain features in compiler and RTL. This allows for finer control over available
     language features than the mode switch. Possible values are:
         - 
     HEAP 
- Allow heap memory.
         
- 
     INITFINAL 
- Initialization/finalization.
         
- 
     RTTI 
- Allow use of RTTI.
         
- 
     CLASSES 
- Allow use of classes.
         
- 
     EXCEPTIONS 
- Allow use of exceptions.
         
- 
     EXITCODE 
- Allow use of exit code for applications.
         
- 
     ANSISTRINGS 
- Allow use of ansistrings.
                                                                            
                                                                            
         
- 
     WIDESTRINGS 
- Allow use of widestrings.
         
- 
     TEXTIO 
- Allow use of standard Pascal text file I/O.
         
- 
     CONSOLEIO 
- Allow use of standard Pascal console I/O (text file).
         
- 
     FILEIO 
- Allow use of standard Pascal binary file I/O.
         
- 
     RANDOM 
- Allow use of Random() function.
         
- 
     VARIANTS 
- Allow use of variants.
         
- 
     OBJECTS 
- Allow use of TP-style objects.
         
- 
     DYNARRAYS 
- Allow use of dynamic arrays.
         
- 
     THREADING 
- Allow use of threading.
         
- 
     COMMANDARGS 
- Allow use of command-line arguments.
         
- 
     PROCESSES 
- Allow use of processes.
         
- 
     STACKCHECK 
- Enable stack checking.
         
- 
     DYNLIBS 
- Allow use of dynamically loadable libraries in the system unit.
         
- 
     SOFTFPU 
- Allow (enable) the use of software floating point operations.
         
- 
     OBJECTIVEC1 
- Allow use of Objective C support routines.
         
- 
     RESOURCES 
- Allow use of resources.
         
- 
     UNICODESTRING 
- Allow use of unicode strings.
 
- 
-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. Here XXX is one of
                                                                            
                                                                            
         - 
     COM 
- COM compatible interfaces (reference counted, descend from IUnknown).
         
- 
     CORBA 
- Not reference counted interfaces.
 
- 
-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.
     
- 
-Sv 
- Support vector processing (uses CPU vector extensions if available)
     
- 
-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.
     
- 
-Sy 
- @pointer returns a typed pointer, this is the same as the $T+ option.
     
- 
-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.