Paramètres de tableau ouvert
Les paramètres de tableau ouvert permettent de ne pas fixer la taille des paramètres de tableau, mais de la rendre dépendante du paramètre en cours transféré.
Le paramètre est déclaré avec "ARRAY OF <type name>", par exemple comme ceci:
Toute longueur de tableau du type spécifié peut ensuite être transférée en tant que paramètre actuel. Même le transfert d'une seule variable du type est autorisé.FUNCTION Produit_scalaire( a, b: ARRAY OF REAL): REAL;
Dans l'exemple, tous les tableaux de REAL peuvent être transférés (également de différentes longueurs pour a et b!), Ou même des variables REAL individuelles. Le transfert de constantes ou d'expressions, par contre, n'est pas autorisé.
Dans une fonction avec des paramètres ouverts, vous souhaitez bien entendu vous renseigner sur les limites d'index des paramètres. Pour cela, les fonctions standard HIGH et LOW ont été introduites. Appliqués aux tableaux ou aux paramètres de tableaux ouverts, ils renvoient les limites d'index. Par exemple:
Les paramètres de tableau ouvert sont toujours créés par le compilateur de telle sorte que la limite inférieure (c'est-à-dire la valeur de LOW) soit égale à zéro. Si le paramètre actuel a une limite inférieure différente de zéro, la limite supérieure du paramètre ouvert est ajustée en conséquence afin que le nombre d'éléments corresponde. Cette convention rend le code machine généré un peu plus efficace, car une seule limite d'index doit être dépassée.FUNCTION Produit_scalaire( a, b: ARRAY OF REAL): REAL; VAR somme: REAL; i: LONGINT; { La taille des paramètres peut atteindre 2 gigaoctets !} BEGIN somme := 0.0; { Il faut vérifier que LOW(a) = LOW(b) et HIGH(a) = HIGH(b) } FOR i := LOW(a) TO HIGH(a) DO somme := somme + a[i]*b[i]; Produit_scalaire := somme; END;
La petite fonction d'exemple n'est pas encore aussi efficace qu'elle pourrait l'être, puisque les deux paramètres de valeur sont copiés à partir de la fonction.
Vous pouvez éviter cette copie en la déclarant comme paramètre VAR ou depuis Pure Pascal 1.1 ou Borland Pascal 7.0 en la déclarant en tant que paramètre CONST