2009-07-21 11 views
5

Warum werden die Variablen in Fortran 2003 im Vergleich zu f90 nicht auf Null initialisiert?Variablen, die in Fortran 2003 nicht initialisiert wurden

Ich habe eine Variable in einer Funktion aus einer Datei. es ist auf 0 initialisiert. Ich möchte es eine andere Funktion verwenden, dann zeigt es einen Müllwert. auch für globale Variablen. Gibt es irgendeine Option, die ich für den Fortran 2003 Compiler einstellen muss?

+1

Welchen Fortran 2003 Compiler verwenden Sie? – tvanfosson

Antwort

3

Ich bin mit keinem Fortran-Compiler vertraut, aber ich weiß, dass die meisten Compiler im Allgemeinen globale und lokale Variablen nicht initialisieren. Die Initialisierung sollte immer im Code erfolgen. Sie sollten sich nicht auf den Compiler verlassen, um dies für Sie zu tun. Der Müll, den Sie sehen, stammt wahrscheinlich aus dem Stapel- oder Speicher-Heap. Einige Compiler füllen den Heap mit Nullen, wenn Speicher zugewiesen wird, was erklären könnte, warum einige Compiler Variablen mit 0 zu initialisieren scheinen. Sie haben nichts initialisiert, sie benutzen nur einen Speicherbereich, der zufällig mit Nullen gefüllt ist.

+3

Wow - nicht vertraut mit einem Fortran-Compiler, aber immer noch bereit, eine Meinung abzugeben. Einfach wow. –

+3

Ich weiß, wie Compiler arbeiten, ja. Habe viel Erfahrung mit Compilern im Allgemeinen, also ist Fortran nicht viel anders. Da die Frage nicht erwähnt, welcher Fortran-Compiler verwendet wird, ist es doch ein bisschen generisch. –

7

Sie könnten versuchen, mit -zero oder/Qzero - diese werden lokale Skalare auf Null initialisieren - aber Sie sollten wirklich explizit Initialwerte setzen. Je nach Compiler ist es, wie Sie herausgefunden haben, eine gute Möglichkeit, Bugs einzuführen. Beachten Sie, dass die Optionsnamen für verschiedene Compiler unterschiedlich sein können. Die genannten sind für Intel Visual Fortran.

2

Es gibt keinen Unterschied zwischen Fortran 90 und Fortran 2003 bei der Initialisierung von Variablen. Der gesamte gültige Fortran 90-Code ist Fortran 2003 gültig und sollte das gleiche Ergebnis liefern (außer für sehr wenige obskure Eckfälle, in denen das Compiler-abhängige Verhalten jetzt vom Standard spezifiziert ist; das ist keiner davon).

Nun, warum Sie einen Unterschied sehen könnten, ist es schwer zu sagen, ohne zu wissen, was Ihre Compiler sind und was Ihr Code genau macht. Ich vermute stark, dass Sie sich auf Compiler-abhängiges Verhalten verlassen, und es brach, als Sie den Compiler änderten.

4

Wir haben diesen Wechsel von Compaq Visual Fortran zu Intel Visual Fortran erlebt. Trotz seiner mangelnden Vertrautheit mit Fortran-Compilern ist der gesamte von Workshop Alex hinterlassene Beitrag korrekt - Sie sollten sich nicht darauf verlassen, dass der Compiler die Anfangswerte festlegt. Der Standard sagt nicht, dass Variablenwerte automatisch eingestellt werden sollten. Selbst wenn dies der Fall ist, ist es riskant, sich auf das Verhalten dieses Compilers zu verlassen.

Compaq Visual Fortran initialisiert automatisch Variablen. Andere Compiler nicht. Dein Code muss repariert werden. Sie können das nur tun, indem Sie alle Ihre Variablen initialisieren.

John

Verwandte Themen