Modes du compilateur
Nous listons ici l'effet exact des différents modes du compilateur. Ils peuvent être définis avec le commutateur $Mode ou par des commutateurs de ligne de commande.
Mode FPC
Ce mode est sélectionné par le commutateur $MODE FPC. Sur la ligne de commande, cela signifie que vous n'utilisez aucun des autres commutateurs de mode de compatibilité. C'est le mode par défaut du compilateur (-Mfpc). Cela signifie essentiellement :
- Vous devez utiliser l'opérateur d'adresse pour attribuer des variables procédurales.
- Une déclaration anticipée doit être répétée exactement de la même manière par la mise en oeuvre d'une fonction/procédure. En particulier, vous ne pouvez pas omettre les paramètres lors de l'implémentation de la fonction ou de la procédure.
- La surcharge des fonctions est autorisée sans modificateur de surcharge.
- Les commentaires imbriqués sont autorisés.
- L'unité Objpas n'est pas chargée.
- Vous pouvez utiliser le type cvar.
- Les PChar sont automatiquement convertis en chaînes de caractères.
- Les chaînes de caractères sont des chaînes de caractères courtes par défaut.
Mode TP
Ce mode est sélectionné par le commutateur $MODE TP. Il tente d'émuler le plus fidèlement possible le comportement de Turbo Pascal 7. Sur la ligne de commande, ce mode est sélectionné par le commutateur -Mtp.
- Les tailles d'énumération sont par défaut une taille d'entreposage de 1 octet s'il y a moins de 257 éléments.
- Vous ne pouvez pas utiliser l'opérateur d'adresse pour attribuer des variables procédurales.
- Une déclaration anticipée ne doit pas nécessairement être répétée exactement de la même manière par la mise en oeuvre d'une fonction/procédure. Vous pouvez notamment omettre les paramètres lors de l'implémentation de la fonction ou de la procédure.
- La surcharge des fonctions n'est pas autorisée.
- L'unité Objpas n'est pas chargée.
- Les commentaires imbriqués ne sont pas autorisés.
- Vous ne pouvez pas utiliser le type cvar.
- Les chaînes de caractères sont des chaînes de caractères courtes par défaut.
Mode Delphi
Ce mode est sélectionné par le commutateur $MODE DELPHI. Il essaie d'émuler, aussi fidèlement que possible, le comportement de Delphi 4 jusqu'aux versions récentes de Delphi. Sur la ligne de commande, ce mode est sélectionné par le commutateur -Mdelphi.
- Vous ne pouvez pas utiliser l'opérateur d'adresse pour attribuer des variables procédurales.
- Une déclaration anticipée ne doit pas nécessairement être répétée exactement de la même manière par la mise en oeuvre d'une fonction/procédure. Vous pouvez notamment omettre les paramètres lors de l'implémentation de la fonction ou de la procédure.
- Les chaînes de caractères d'Ansistring sont par défaut, cela signifie que $MODE DELPHI implique un {$H ON} implicite.
- La surcharge des fonctions n'est autorisée qu'avec le modificateur Overload.
- Le code en ligne est autorisé : il n'est pas nécessaire de l'activer avec la directive {$INLINE}.
- Les commentaires imbriqués ne sont pas autorisés.
- L'unité Objpas est chargée juste après l'unité système. L'une des conséquences de ceci est que le type Integer est redéfini comme LongInt. Inversement, cela signifie que system.integer est toujours 16 bits.
- Les paramètres des méthodes de classe peuvent avoir les mêmes noms que les propriétés de classe (bien que ce soit une mauvaise pratique de programmation).
Mode DelphiUnicode
Ce mode est sélectionné par le commutateur $MODE DELPHIUNICODE. Il essaie d'émuler, aussi fidèlement que possible, le comportement de Delphi 4 jusqu'aux versions récentes de Delphi. Sur la ligne de commande, ce mode est sélectionné par le commutateur -Mdelphiunicode.
Ce mode est identique au mode Delphi, sauf que le mot-clef String indique une chaîne de caractères UnicodeString au lieu d'une chaîne de caractères AnisString.
Mode OBJFPC
Ce mode est sélectionné par le commutateur $MODE OBJFPC. Sur la ligne de commande, ce mode est sélectionné par le commutateur -Mobjfpc.
- Les exceptions, les classes et les interfaces sont activées.
- Vous devez utiliser l'opérateur d'adresse pour attribuer des variables procédurales.
- Une déclaration anticipée doit être répétée exactement de la même manière par la mise en oeuvre d'une fonction/procédure. En particulier, vous ne pouvez pas omettre les paramètres lors de l'implémentation de la fonction ou de la procédure, et la convention d'appel doit également être répétée.
- La surcharge des fonctions est autorisée.
- Les commentaires imbriqués sont autorisés.
- L'unité Objpas est chargée juste après l'unité System. L'une des conséquences de ceci est que le type Integer est redéfini comme LongInt.
- Vous pouvez utiliser le type cvar.
- Les PChar sont automatiquement convertis en chaînes de caractères.
- Les paramètres des méthodes de classe ne peuvent pas avoir les mêmes noms que les propriétés de classe.
- Les chaînes de caractères sont des chaînes de caractères courtes par défaut. Vous pouvez utiliser le commutateur de ligne de commande -Sh ou le commutateur {$H+} pour modifier cela.
Mode MACPAS
Ce mode est sélectionné par le commutateur $MODE MACPAS. Sur la ligne de commande, ce mode est sélectionné par le commutateur -Mmacpas. Il active principalement certaines fonctionnalités supplémentaires :
- Prise en charge de la directive $SETC.
- Prise en charge des directives $IFC, $ELSEC et $ENDC.
- Prise en charge de la construction UNDEFINED dans les macros.
- Prise en charge de TRUE et FALSE comme valeurs dans les expressions macro.
- Les macros peuvent se voir attribuer des nombres hexadécimaux, comme $2345.
- Le mot clef Implementation peut être omis si la section Implementation est vide.
- Le mot clef du modificateur cdecl peut être abrégé en C.
- Le modificateur UNIV pour les types dans les listes de paramètres est pris en charge.
- ... (points de suspension) est autorisé dans les déclarations de procédure et est fonctionnellement égal au mot clef varargs.
- $MODESWITCH nestedprocvars est activé par défaut.
(Remarque : les macros sont appelées «Variables du compilateur» dans les dialectes Mac OS.)
Actuellement, les extensions Mac OS Pascal suivantes ne sont pas encore prises en charge en mode MACPAS :
- Les procédures externes déclarées dans l'interface doivent avoir la directive External, sauf si l'unité ne possède pas de section Implementation.
- Cycle au lieu de Continue.
- Partir au lieu de faire une pause
- Exit ne peut pas avoir en paramètre le nom de la procédure à quitter. Au lieu de cela, pour une fonction, la valeur à renvoyer peut être fournie en paramètre.
- Aucune utilisation de propagation.
- Les directives du compilateur définies dans les sections d'interface ne sont pas exportées.
Mode ISO
Ce mode est sélectionné par le commutateur $MODE ISO. Sur la ligne de commande, ce mode est sélectionné par le commutateur -Miso. Dans ce mode, le compilateur est conforme aux exigences de niveau 0 et de niveau 1 de la norme ISO/IEC 7185. Il implémente les fonctionnalités supplémentaires suivantes :
- Les fichiers externes sont déclarés comme paramètres dans l'instruction du programme.
- Les fichiers sont associés à des «variables tampon».
- Les procédures "get" et "put" opèrent sur les variables du tampon de fichier.
- Fonctionnement du module tel que requis par ISO Pascal.
- Moins unaire comme l'exige l'ISO Pascal.
Mode Pascal étendu (Extended Pascal)
Ce mode est sélectionné par le commutateur $MODE EXTENDEDPASCAL. Il essaie d'imiter, aussi fidèlement que possible, le comportement de Pascal étendu. C'est fondamentalement la même chose que l'ISO Pascal, mais fait référence à la spécification ISO 10206.