La définition de zones communes permet le partage d'un «pool» de variables entre plusieurs unités de programmes.
Exemple :
INTEGER FUNCTION DEPILE()
COMMON /PILE/ H,T
INTEGER H,T(10)
DEPILE = T(H)
H = H - 1
RETURN
END
SUBROUTINE EMPILE(X)
COMMON /PILE/ H,T
INTEGER H,T(10),X
H = H + 1
T(H) = X
RETURN
END
Dans ces deux unités l'instruction COMMON déclare les variables H et T comme faisant partie de la zone commune (globale) nommée PILE.
L'intention du programmeur est ici de définir un objet PILE, accessible par le biais de «primitives» : EMPILE, DEPILE, VIDER, etc ... L'usage des COMMONs permet donc d'éviter - dans certains cas - des passages de paramètres inutiles. N'en abusez pas. Dans le cas où, par exemple, un programme doit manipuler plusieurs piles, on préférera passer la pile (hauteur + vecteur) en paramètre plutôt que définir une multitude de zones communes. A cet égard, la philosophie personnelle de l'auteur est la suivante:
On définit un COMMON chaque fois que l'on isole -dans un programme- une entité unique destinée à être utilisé à partir de plusieurs unités de programme. Le COMMON contient les variables propres à cette entité, et l'accès à ces variables ne doit sefaire qu'à partir d'un nombre restreint de primitives d'accès.
Attention à l'ordre et au type des éléments d'un COMMON, le compilateur FORTRAN ne vérifie pas la cohérence de type d'une unité à l'autre.... En pratique il est très fortement conseillé de reproduire textuellement les instructions COMMON .
Pour finir, notez que l'initialisation statique (par DATA) des variables d'un COMMON ne peut se faire qu'à l'intérieur d'une unité de programme BLOCK DATA (qui, d'ailleurs, ne sert qu'à çà).
Exemple : Si on veut initialiser la pile à vide :
BLOCK DATA INIT
COMMON /PILE/ H,T
INTEGER H,T(10)
DATA H / 0 /
END