Bonjour
Pour Forward, pas de pb : ça signifie que la fonction est déclarée sur la ligne en question, mais elle est définie plus tard.
En effet, la ligne
FUNCTION GetSysSec:Integer;FORWARD
indique au compilateur que la fonction GetSysSec existe & qu'elle retourne un entier. C'est la déclaration.
Mais on ne sait toujours pas ce qu'elle fait.
Ce qu'elle fait est dans la partie définition, qui se fait plus loin.
L'intérêt ?
Il y en a au moins deux :
- ça permet de regrouper les déclarations en début de programme.
- ça permet de s'affranchir de l'ordre réel des définitions. Ainsi une procédure qui en appelle une autre n'a plus besoin d'être définie après la procédure appelée. Il suffit que la déclaration (en "forward") de cette dernière soit placée avant la procédure appelante.
Il faut dire que ça n'est réellement utile que dans le cas de procédures/fonctions qui s'appellent mutuellement. Ce qui est assez rare !
Exemple :
1 2 3 4 5 6 7 8 9 10 11
| procedure p1;
begin
(** définition de p1 **)
end;
procedure p2;
begin
...
p1; (** appel de p1 **)
...
end; |
Dans ce cas, si on inverse l'ordre de p1 & p2, le compilateur hurle car à la compilation de p2, il ne connaît pas p1.
Si on écrit :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| procedure p1;forward;
procedure p2;forward;
procedure p2;
begin
...
p1;
...
end;
procedure p1;
begin
...
end; |
là, ça fonctionne. Ici, la déclaration de p2 en "forward" est inutile.
En fait, c'est l'équivalent des prototypes de fonctions du C.
Pour le reste, je serai plus bref : je ne m'en souviens plus. 
Donc, je me la ferme.
Partager