Les constantes
Tout comme dans Turbo Pascal, Free Pascal prend en charge les constantes ordinaires et typées. Ils sont déclarés dans un bloc de déclaration constante dans une déclaration d'unité, de programme ou de classe, de fonction ou de procédure.
Constantes ordinaires
Les déclarations de constantes ordinaires sont construites à l'aide d'un nom d'identifiant suivi d'un jeton «=» et suivi d'une expression facultative composée de combinaisons légales de nombres, de caractères, de valeurs booléennes ou de valeurs énumérées, selon le cas. Le diagramme de syntaxe suivant montre comment construire une déclaration légale d'une constante ordinaire.
Le compilateur doit être capable d'évaluer l'expression dans une déclaration constante au moment de la compilation. Cela signifie que la plupart des fonctions de la bibliothèque Run-Time ne peuvent pas être utilisées dans une déclaration constante. Des opérateurs tels que +, -, *, /, not, and, or, div, mod, ord, chr, sizeof, pi, int, trunc, round, frac, odd peuvent cependant être utilisés.
Lorsqu'une constante ordinaire déclarée précédemment est utilisée dans le code, le compilateur insérera la valeur réelle de la constante au lieu du nom de la constante. Autrement dit, les deux morceaux de code suivants sont entièrement équivalents :
Ce qui précède produira le même code que si l'on avait écrit :
Seules les constantes des types suivants peuvent être déclarées :
- Types ordinaux
- Définir les types
- Types de pointeurs (mais la seule valeur autorisée est Nil).
- Types réels
- Char,
- String
Les éléments suivants sont toutes des déclarations constantes valides :
L'attribution d'une valeur à une constante ordinaire n'est pas autorisée. Ainsi, compte tenu de la déclaration précédente, ce qui suit entraînera une erreur du compilateur :
Pour les constantes de chaîne de caractères, le type de chaîne dépend de certains commutateurs du compilateur. Si un type spécifique est souhaité, une constante typée doit être utilisée, comme expliqué dans la section suivante.
Avant la version 1.9, Free Pascal ne prenait pas correctement en charge les constantes 64 bits. Depuis la version 1.9, des constantes 64 bits peuvent être spécifiées.
Constantes typées
Parfois, il est nécessaire de spécifier le type d'une constante, par exemple pour les constantes de structures complexes. Leur définition est assez simple :
Contrairement aux constantes ordinaires, une valeur peut leur être attribuée au moment de l'exécution. Il s'agit d'un ancien concept de Turbo Pascal, ayant été remplacé par le support des variables initialisées.
La prise en charge de l'attribution de valeurs aux constantes typées est contrôlée par la directive {$J} : elle peut être désactivée, mais est activée par défaut (pour la compatibilité Turbo Pascal). Les variables initialisées sont toujours autorisées.
Remarque : Il convient de souligner que les constantes saisies sont automatiquement initialisées au démarrage du programme. Cela est également vrai pour les constantes typées locales et les variables initialisées. Les constantes typées locales sont également initialisées au démarrage du programme. Si leur valeur a été modifiée lors des appels précédents de la fonction, ils conserveront leur valeur modifiée, c'est-à-dire, par exemple, qu'ils ne sont pas initialisés à chaque appel de la fonction.
Chaînes de caractères de ressources
Un type particulier de bloc de déclaration de constante est le bloc Resourcestring. Les déclarations de chaînes de ressources ressemblent beaucoup aux déclarations de chaînes de caractères constantes : les chaînes de caractères de ressources agissent comme des chaînes de caractères constantes, mais elles peuvent être localisées au moyen d'un ensemble de routines spéciales dans l'unité objpas. Un bloc de déclaration de chaîne de caractères de ressources n'est autorisé que dans les modes Delphi ou Objfpc.
Voici un exemple de définition de chaîne de caractères de ressources :
Toutes les constantes de chaîne de caractères définies dans la section resourcestring sont entreposées dans des tables spéciales. Les chaînes de caractères de ces tables peuvent être manipulées au moment de l'exécution avec certains mécanismes spéciaux de l'unité objpas.
Sémantiquement, les chaînes de caractères agissent comme des constantes ordinaires ; Il n'est pas permis de leur attribuer des valeurs (sauf via les mécanismes spéciaux de l'unité objpas). Cependant, elles peuvent être utilisées dans des affectations ou des expressions comme constantes de chaîne de caractères ordinaires. L'utilisation principale de la section resourcestring est de fournir un moyen simple d'internationalisation.
Remarque : Notez qu'une chaîne de caractères de ressource donnée sous forme d'expression ne changera pas si les parties de l'expression sont modifiées :
Si les routines de localisation traduisent Part1 et Part2, la constante Sentence ne sera pas traduite automatiquement : elle a une entrée distincte dans les tables de chaînes de ressources et doit donc être traduite séparément. La construction ci-dessus dit simplement que la valeur initiale de Sentence est égale à Part1+' '+Part2.
Remarque : De même, lors de l'utilisation de chaînes de caractères de ressources dans un tableau de constantes, seules les valeurs initiales des chaînes de caractères de ressources seront utilisées dans le tableau : lorsque les constantes individuelles sont traduites, les éléments du tableau conserveront leur valeur d'origine.
Cela affichera «Oui» ou «Non» en fonction de la valeur de B, même si les constantes Yes et No ont été localisées par un mécanisme de localisation.