Bonjour

Je vous expose le problème..

Je travaille sur un très gros code (industriel ET critique (vies de milliers de personnes en jeu)), écrit entre il y a 27 ans et il y a 6 ans.

Ses auteurs auraient pu écrire "Le Guide des Mauvaises Pratiques en Fortran".. :

  • noms de variables cryptiques
  • noms de fonctions cryptiques
  • nom de modules cryptiques
  • aucun commentaire (en entête) des routines sur leur but
  • aucun commentaire (en entête) des routines sur les entrées/sorties
  • usage plus qu'abusif du goto (toutes les 5 lignes)
  • API des routines réduite au minimum (un paramètre d'entrée (cas) et un paramètre de sortie (code d'erreur)), tout se passant par COMMON
  • découpage non fonctionnel des fichiers
  • usage de variables locales portant le même nom que des variables de COMMON
  • et (j'ai gardé le meilleur pour la fin ) usage de variables portant le même nom dans des COMMON différents...
  • combinaison des 2 derniers points..

C'est précisément sur ce cas que je demande votre aide..

Soit 2 COMMON :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
COMMON / TOTO1 / A, B, C, VAR1, D, E, F

COMMON / TOTO2 / G, H, I, K, L, VAR1, M, N
Soit une routine contenant ces 2 COMMON :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
subroutine TITI 
 
include 'TOTO1'
include 'TOTO2'
Si dans le corps de cette routine je trouve :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
if ( VAR1 .eq. 1 ) then
   VAR1 = 2
end if
Que se passe-t-il ?

Je ne pense pas que cela prenne ou affecte les 2 en même temps (si elles ne sont pas au même décalage dans les COMMON).

Laquelle est prise pour le test ? pour l'affectation ?

Est-ce celle du premier COMMON ? du dernier ?

Je sollicite votre expertise..

Mais s'il vous plaît, au vu de la criticité du code, je ne souhaiterais que des réponses réelles, de gens qui connaissent la réponse, pas des hypothèses..

(je vais la jouer "Qui veut gagner des millions" : "ne répondez que si vous savez" )

Merci