NEW |
Sinus |
IBM Personal Computer Pascal |
Syntaxe
Procedure NEW(Var P:pointer);
|
Procedure NEW(VAR P:pointer; T1, T2, ... Tn:tags);
|
Paramètres
Nom |
Description |
P |
Ce paramètre permet d'indiquer le pointeur étant retourné. |
T2, ... Tn |
Ces paramètres permettent d'indiquer la liste des balises à attribués. |
Description
Cette procédure permet d'allouer une nouvelle variable spécifié et affecte un pointeur à la variable de pointeur spécifié (un paramètre VAR).
Remarques
- La première syntaxe alloue une nouvelle variable V et affecte un pointeur à V à la variable de pointeur P (un paramètre Var). Si V est un type SUPER ARRAY,
le format longue de la deuxième syntaxe doit être utilisée. Si V est un type d'enregistrement avec des variantes, les variantes donnant la plus grande taille possible sont supposées, permettant d'affecter
n'importe quelle variante à P^.
- Dans la deuxième syntaxe, elle attribue une variable avec la variante spécifiée par les valeurs de champ d'étiquette TI, T2, ... Tn. Les valeurs des champs de balises sont
répertoriées dans l'ordre de déclaration. Tout champ de balise de fin peut être omis.
- Si toutes les valeurs de champ de balise sont constantes, seule la quantité d'espace requise sur le tas est allouée, arrondie à une limite de mot. La valeur de tout champ de balise
omis est supposée être telle que la taille maximale possible est allouée.
- Si certains champs de balise ne sont pas des valeurs constantes, le compilateur suppose le premier champ de balise non constant et toutes les balises suivantes ont une valeur inconnue
et allouent la taille maximale nécessaire pour ce cas. Le programmeur doit définir tous les champs de balise à leurs valeurs appropriées après l'appel à NEW et ne jamais les modifier.
Le compilateur n'affecte pas les valeurs de balise, ou vérifie qu'elles sont correctement initialisées, ou vérifie que leur valeur n'est pas modifiée pendant l'exécution. En ISO Pascal,
une variable créée avec la forme longue de NEW ne peut pas être utilisée comme opérande d'expression, elle ne peut pas non plus être transmise comme paramètre ou une valeur peut être
affectée à elle. L'IBM Personal Computer Pascal ne détecte pas ces erreurs. Les champs de l'enregistrement peuvent être utilisés normalement.
- Attribuer un enregistrement plus grand à un plus petit alloué avec le format longue de la deuxième syntaxe de NEW effacerait une partie du tas. Cette condition est difficile
à détecter au moment de la compilation. Par conséquent, toute affectation à un enregistrement dans le tas ayant des variantes utilise la longueur réelle de l'enregistrement dans le tas,
plutôt que la longueur maximale. Toutefois, une affectation à un champ dans une variante non valide peut détruire une partie d'une autre variable de segment de mémoire ou la structure
de segment de mémoire elle-même. Cette erreur n'est pas interceptée.
- La fonction de type SUPER ARRAY permet aux pointeurs de SUPER ARRAY. Le format longue de la deuxième syntaxe de NEW est utilisée, sauf que les valeurs de limite
supérieure du tableau sont données à la place des valeurs de balise. Toutes les limites supérieures doivent être indiquées. Le tableau entier référencé par un tel pointeur ne peut pas être
affecté ou comparé, sauf si le type de référence est LSTRING. Le tableau entier peut être passé comme paramètre de référence si le paramètre formel est du même type
SUPER ARRAY. Les composantes de la matrice peuvent être utilisés normalement.
Dernière mise à jour : Dimanche, le 19 avril 2020