Question

J'ai été chargé de maintaing un certain héritage Fortran code, et je vais avoir du mal à obtenir le compiler avec gfortran. J'ai écrit une quantité juste de Fortran 95, mais c'est ma première expérience avec Fortran 77. Cet extrait de code est problématique:

      CHARACTER*22 IFILE, OFILE
      IFILE='TEST.IN'
      OFILE='TEST.OUT'
      OPEN(5,FILE=IFILE,STATUS='NEW')   
      OPEN(6,FILE=OFILE,STATUS='NEW')
      common/pabcde/nfghi

Quand je compile avec gfortran file.FOR, toutes les lignes commençant par l'instruction common sont des erreurs (par exemple Error: Unexpected COMMON statement at (1) pour chaque ligne suivante jusqu'à ce qu'il atteigne la limite d'erreur 25). Je compilé avec -Wall -pedantic, mais fixant les mises en garde n'a pas résolu ce problème.

La chose folle est que si je commente sur les 4 les lignes commençant par IF='TEST.IN', les compiles du programme et fonctionne comme prévu, mais je dois commenter tous . En quittant l'un d'eux décommentée me donne les mêmes erreurs en commençant par l'instruction common. Si je commente la déclaration de common, je reçois les mêmes erreurs, juste à partir de la ligne suivante.

Je suis sur Mac OS X Leopard (non Snow Leopard) en utilisant gfortran. Je l'ai utilisé ce système avec très largement gfortran pour écrire des programmes Fortran 95, donc en théorie le compilateur lui-même est sain d'esprit. Qu'est-ce qui se passe avec ce code?


Modifier : avec G77 donne Compiler:

test.FOR: In program `MAIN__':
test.FOR:154: 
     IFILE='TEST.IN'
     1
test.FOR:158: (continued):
     common/pabcde/nfghi
     2
Statement at (2) invalid in context established by statement at (1)

Er, quel contexte est établi à (1)?

Était-ce utile?

La solution

Je ne pense pas que vous pouvez mettre des déclarations de COMMON ci-dessous les instructions exécutables en FORTRAN 77, voir spécification, Sec. 3.5. Il suffit de déplacer la déclaration de COMMON proche du début de la procédure, avant toute instruction exécutable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top