2009-07-21 11 views
5

Perché le variabili non vengono inizializzate a zero in fortran 2003 se confrontate con f90?Variabili non inizializzate in Fortran 2003

Ho una variabile in una funzione da un file. è inizializzato a 0. Voglio usarlo un'altra funzione quindi mostra un valore spazzatura. anche per le variabili globali. C'è qualche opzione che devo impostare per il compilatore fortran 2003?

+1

Quale compilatore fortran 2003 stai usando? – tvanfosson

risposta

3

Non conosco alcun compilatore Fortran, ma so che, in generale, la maggior parte dei compilatori non inizializza le variabili globali e locali. L'inizializzazione dovrebbe sempre essere fatta nel codice. Non dovresti fare affidamento sul compilatore per farlo per te. La spazzatura che stai vedendo è probabilmente dallo stack o dall'heap di memoria. Alcuni compilatori riempiranno l'heap di zero durante l'allocazione della memoria, il che potrebbe spiegare perché alcuni compilatori sembreranno inizializzare le variabili con 0. In realtà non hanno inizializzato nulla, stanno solo usando un'area di memoria che è stata riempita con zero.

+3

Wow - non ha familiarità con nessun compilatore Fortran ma è comunque disposto a offrire un'opinione. Solo wow. –

+3

So come funzionano i compilatori, sì. Ho molta esperienza con i compilatori in generale, quindi Fortran non è molto diverso. Dato che la domanda non menziona quale compilatore Fortran è usato, dopo tutto è solo un po 'generico. –

7

Si potrebbe provare a usare -zero o/Qzero - questi inizializzeranno gli scalari locali a zero - ma in realtà dovresti impostare in modo esplicito i valori iniziali. A seconda del compilatore che lo fa per te, come hai scoperto, è un buon modo per introdurre i bug. Si noti che i nomi delle opzioni potrebbero essere diversi per compilatori diversi. Quelle citate sono per Intel Visual Fortran.

2

Non c'è differenza tra Fortran 90 e Fortran 2003 nell'inizializzazione delle variabili. Tutto il codice Fortran 90 valido è valido per Fortran 2003 e dovrebbe fornire lo stesso risultato (eccetto per pochissimi casi angolari in cui il comportamento dipendente dal compilatore è ora specificato dallo standard, non è uno di quelli).

Ora, per quanto riguarda il motivo per cui è possibile vedere una differenza, è difficile dire senza sapere cosa sono i compilatori e cosa fa esattamente il codice. Sospetto fortemente che stiate facendo affidamento sul comportamento dipendente dal compilatore e si è rotto quando avete modificato il compilatore.

4

Abbiamo sperimentato questo passaggio da Compaq Visual Fortran a Intel Visual Fortran. Nonostante la sua mancanza di familiarità con i compilatori Fortran, l'intero post lasciato da Workshop Alex è corretto - non dovresti fare affidamento sul compilatore che imposta i valori iniziali. Lo standard non dice che i valori variabili dovrebbero essere impostati automaticamente. Anche se fosse così, fare affidamento su questo comportamento del compilatore è rischioso.

Compaq Visual Fortran inizializza automaticamente le variabili. Altri compilatori no. Il tuo codice deve essere corretto. Puoi farlo solo inizializzando tutte le tue variabili.

John

Problemi correlati