2017-09-06 5 views
0

Je copié et collé dans le texte sublime le programme suivant d'un Fortran 77 tutorial:Erreur de compilation pour un simple programme Fortran 77

program circle 
     real r, area 

c This program reads a real number r and prints 
c the area of a circle with radius r. 

     write (*,*) 'Give radius r:' 
     read (*,*) r 
     area = 3.14159*r*r 
     write (*,*) 'Area = ', area 

     stop 
     end 

je l'ai enregistré comme circle.f et compilé à partir du terminal (macOS Sierra):

gfortran circle.f 

Il a renvoyé le message d'erreur:

circle.f:1:1: 

program circle 
1 
Error: Non-numeric character in statement label at (1) 
circle.f:1:1: 

program circle 
1 
Error: Unclassifiable statement at (1) 

Comment puis-je le réparer? (The answer pour une autre question similaire ne résout pas le problème.)

+3

Essayez d'ajouter 6 espaces avant 'programme circle'. – apocalypse

+0

@apocalypse: ça a résolu le problème, merci beaucoup! (Dois-je supprimer ma question?) Il est dit dans le tutoriel que "Les espaces vides sont ignorés dans Fortran 77. Donc si vous supprimez tous les espaces dans un programme Fortran 77, le programme est toujours acceptable pour un compilateur mais presque illisible pour les humains. " Je ne comprends pas pourquoi l'ajout des espaces le ferait fonctionner. – Jack

+1

Une recherche rapide avec "Fortran doit avoir de l'espace" (je ne savais pas quoi chercher lorsque j'ai posté cette question) sur Google, revient sur "La syntaxe Fortran 77 exige que vous donniez 6 espaces avant toutes les commandes. la version avec carte perforée de Fortran Après les 6 premiers espaces, vous pouvez placer des espaces supplémentaires pour l'indentation si vous le souhaitez. " – Jack

Répondre

2

Fortran 77 a une source de forme fixe. Seuls les caractères compris entre la 7ème et la 73ème colonne peuvent être utilisés pour les instructions. (Les 6 premiers caractères sont utilisés pour déclarer toute la ligne un commentaire, comme des étiquettes numériques, ou pour indiquer que cette ligne est une continuation de la précédente.) Les caractères 74e et plus tard sont simplement ignorés.

À l'intérieur de cette plage, les espaces sont ignorés. Donc, les lignes suivantes seraient identiques:

column 1 1 2 2 3 3 4 4 
1 5 0 5 0 5 0 5 0 5 
----------------------------------------------- 
     if (i .le. 10) call my_sub(i) 
     if(i.le.10)callmy_sub(i) 
      i f (i. le .10) cal lmy_ sub(i) 

Je vous laisse décider lequel est le plus facile à lire.

Mais si vous démarrez au premier caractère, même avec l'instruction "programme" de démarrage, le compilateur va se plaindre. Il attendait c, C, ! (pour déclarer toute la ligne un commentaire) ou un chiffre comme le début d'une étiquette numérique.

+0

Note rapide: Je ne suis pas sûr que 'c',' C' et '!' Sont les seuls marqueurs possibles pour un commentaire. Mais apparemment 'p' ne l'est pas;) – chw21

+1

dans la norme f77 'C' ou astérisque peut être utilisé dans la colonne 1 pour commenter. Les versions plus récentes permettent le '! 'Sous forme fixe, car il peut lancer un commentaire n'importe où (sauf s'il s'agit d'un marqueur de continuation) – agentp