Stop fortran-Programm mit nicht-null exit status
Ich bin die Anpassung einige Fortran-code habe ich nicht geschrieben, und ohne eine Menge von fortran-Erfahrung selbst. Ich habe gerade eine situation, wo einige fehlerhafte Eingabe bekam stillschweigend ignoriert, und würde das gerne ändern, dass der code etwas besser geeignet. Wenn das C ist, dann würde ich etwas tun, wie
fprintf(stderr, "There was an error of kind foo");
exit(EXIT_FAILURE);
Aber in fortran, die besten, die ich kenne, wie zu tun, sieht aus wie
write(*,*) 'There was an error of kind foo'
stop
die nicht über die Wahl der Ausgabe-stream (minor Problem) - und exit-status (großes problem).
Wie kann ich kündigen, ein fortran-Programm mit einem nicht-null exit status?
In diesem Fall ist compiler-abhängig, eine Lösung, die funktioniert mit gfortran wäre schön.
InformationsquelleAutor der Frage MvG | 2013-06-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
stop
- Anweisung können Sie eine Ganzzahl oder Zeichen-Wert. Es scheint wahrscheinlich, dass diese Ausgabe zu stderr wenn das vorhanden ist, aber stderr ist OS abhängig ist, ist es unwahrscheinlich, dass die Fortran-Sprache-standard erfordert, dass, wenn es sagt überhaupt nichts. Es ist auch wahrscheinlich, dass, wenn Sie verwenden die option "numerisch", der exit-status gesetzt wird. Ich versuchte es mit gfortran auf einem Mac, und das war der Fall:Während genau das, was
stop
mit integer oder string machen wird, ist OS-abhängig ist, die Aussage ist Teil der Sprache und wird immer kompilieren.call exit
ist eine GNU-Erweiterung und kann den link nicht auf einigen Betriebssystemen.InformationsquelleAutor der Antwort M. S. B.
Neben stop nes ist auch Fehler stop n seit Fortran 2008.
Mit gfortran unter Windows, Sie beide senden Sie die Fehlernummer an das OS, wie gesehen werden kann, mit einer anschließenden
echo %errorlevel%
. Die Aussage Fehler stop können auch weitergegeben werden, eine Fehlermeldung.InformationsquelleAutor der Antwort
Konnte ich nicht finden, etwas über
STOP
im gfortran 4.7.0 Stichwort-indexwahrscheinlich, weil es ist eine Sprache, Schlagwort und nicht eine intrinsische. Dennoch gibt es eine AUSFAHRT intrinsische das scheint zu tun genau das, was ich suchte: die Ausfahrt mit einem bestimmten status. Und die fortran-wiki hat ein kleines Beispiel für die Verwendung von stderrdie erwähnt eine KonstanteERROR_UNIT
. So nun ist mein code sieht jetzt wie folgt aus:Zumindest kompiliert. Prüfung noch ausstehend, aber es sollte funktionieren. Wenn jemand weiß, ein eleganter oder besser geeignete Lösung, fühlen Sie sich frei zu bieten, alternative Antworten auf diese Frage.
InformationsquelleAutor der Antwort MvG