2016-07-12 11 views
0

hier ein MWE einer Funktion in meinem Code ist, dass zwei Fehler zu erzeugen, wenn kompiliert wird:„nicht klassifizierbar Aussage“ bei if-Anweisung

function foo (a) 

    implicit none 
    real, intent(in)::a 
    real::foo 

    if -1.0 < 0.0 then 
     write(*,*) "hi" 
    end if 

    foo = a 

    end function foo 

Die Fehler, die ich bei der Kompilierung bekommen sind:

frag.f90:7063.8: 
     if -1.0 < 0.0 then 
     1 
Error: Unclassifiable statement at (1) 
frag.f90:7065.11: 

     end if 
      1 
Error: Expecting END FUNCTION statement at (1) 

Ich verstehe nicht, warum ich eine unklassifizierbare Aussage bei einer if Erklärung bekomme. Ich glaube, der zweite Fehler ist mit dem ersten verknüpft (wenn es keine if-Anweisung gibt, keine Notwendigkeit, es zu schließen), wenn also der erste Fehler behoben wird, sollte der zweite auch behoben werden.

Ich kompiliere mit gfortran.

+1

Als ich lehren, habe ich immer Studenten fragen Klammern um Bedingungen hinzufügen, auch wenn die Programmiersprache nicht verhängen ist. Es ist gut für die Lesbarkeit und Debugging und ist in der Tat obligatorisch in Fortran. – innoSPG

Antwort

3

Sie müssen den logischen Ausdruck in Klammern setzen:

if (-1.0 < 0.0) then 

Der zweite Fehler tatsächlich Müll ist und sollte so bald wie Sie die Anweisung festgelegt verschwunden sein.


Aus dem Fortran 2008 Standard, Cl. 8.1.7.4 "IF-Anweisung":

1 Die IF-Anweisung steuert die Ausführung einer einzelnen Aktionsanweisung basierend auf einem einzelnen logischen Ausdruck.

R837 if-stmt     is IF (scalar-logical-expr) action-stmt 
+0

Python fertig verwöhnt mich. – Joshua