Переменные, не инициализированные в Фортране 2003

В Java, если значение x равно NaN, то x == x возвращает false, а x != x возвращает true.

5
задан Benjamin 30 December 2013 в 19:01
поделиться

4 ответа

Вы можете попробовать использовать -zero или / Qzero - они инициализируют локальные скаляры равными нулю, но вы действительно должны явно устанавливать начальные значения. Как вы уже выяснили, это зависит от компилятора, который делает это за вас, и это хороший способ вносить ошибки. Обратите внимание, что имена параметров могут отличаться для разных компиляторов. Упомянутые относятся к Intel Visual Fortran .

7
ответ дан 18 December 2019 в 10:48
поделиться

Я не знаком ни с одним компилятором Fortran, но я знаю, что в целом большинство компиляторов не инициализируют глобальные и локальные переменные. Инициализация всегда должна выполняться в коде. Вы не должны полагаться на компилятор, который сделает это за вас. Вы видите мусор, вероятно, из стека или кучи памяти. Некоторые компиляторы заполняют кучу нулями при выделении памяти, что может объяснить, почему некоторые компиляторы будут инициализировать переменные нулем. На самом деле они ничего не инициализировали, они просто используют область памяти, которая оказалась заполненной нулями .. .

3
ответ дан 18 December 2019 в 10:48
поделиться

Нет разницы между Fortran 90 и Fortran 2003 в инициализации переменных. Весь допустимый код Fortran 90 является допустимым Fortran 2003 и должен давать тот же результат (за исключением очень немногих неясных угловых случаев, когда поведение, зависящее от компилятора, теперь определяется стандартом; это не один из них).

Теперь, что касается того, почему вы можете увидеть разницу, трудно сказать, не зная, какие у вас компиляторы и что именно делает ваш код. Я сильно подозреваю, что вы полагались на поведение, зависящее от компилятора, и оно сломалось, когда вы изменили компилятор.

2
ответ дан 18 December 2019 в 10:48
поделиться

Мы испытали этот переход с Compaq Visual Fortran на Intel Visual Fortran. Несмотря на то, что он не знаком с компиляторами Fortran, весь пост, оставленный Workshop Alex, верен - вы не должны полагаться на то, что компилятор устанавливает начальные значения. Стандарт не говорит, что значения переменных должны устанавливаться автоматически. Даже если это так, полагаться на такое поведение компилятора рискованно.

Compaq Visual Fortran автоматически инициализирует переменные. Другие компиляторы этого не делают. Ваш код нужно исправить. Вы можете сделать это только инициализировав все свои переменные.

John

4
ответ дан 18 December 2019 в 10:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: