2010-05-16 4 views
0

J'ai été chargé de maintenir un code fortran hérité, et j'ai du mal à le compiler avec gfortran. J'ai écrit une bonne quantité de Fortran 95, mais c'est ma première expérience avec Fortran 77. Ce bout de code est la problématique un:Quel est le problème avec cet extrait de Fortran '77?

 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 la déclaration common sont des erreurs (par exemple Error: Unexpected COMMON statement at (1) pour chaque ligne suivante jusqu'à ce qu'elle atteigne la limite d'erreur de 25). J'ai compilé avec -Wall -pedantic, mais la fixation des avertissements n'a pas résolu ce problème.

La chose folle est que si je commente sur les 4 lignes commençant par IF='TEST.IN', le programme compile et fonctionne comme prévu, mais je dois commenter tous. En laissant l'un d'eux sans commentaire, cela me donne les mêmes erreurs en commençant par l'instruction common. Si je commente l'instruction common, j'obtiens les mêmes erreurs, en commençant juste sur la ligne suivante.

Je suis sur OS X Leopard (pas Snow Leopard) en utilisant gfortran. J'ai beaucoup utilisé ce système avec gfortran pour écrire des programmes Fortran 95, donc en théorie le compilateur lui-même est sain. Que diable se passe-t-il avec ce code?


Modifier: Compiler avec G77 donne:

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)?

Répondre

4

Je ne pense pas que vous puissiez mettre des instructions COMMON sous les instructions exécutables dans FORTRAN 77, voir the specification, Sec. 3.5. Il suffit de déplacer l'instruction COMMON près du début de la procédure, avant toute instruction exécutable.

+0

Ahh, bien sûr. Je pensais à cela, mais j'avais besoin de déplacer les instructions exécutables, et je ne les ai pas suffisamment déplacées au départ. Lire la spécification m'a aidé à déchiffrer d'autres erreurs que je recevais aussi. – notJim

Questions connexes