Переменные, не инициализированные в Fortran 2003 - PullRequest
5 голосов
/ 21 июля 2009

Почему переменные не инициализируются в ноль в fortran 2003 по сравнению с f90?

У меня есть переменная в функции из файла.он инициализирован на 0. Я хочу использовать другую функцию, тогда она показывает значение мусора.даже для глобальных переменных также.Есть ли какая-либо опция, которую мне нужно установить для компилятора Фортран 2003?

Ответы [ 4 ]

7 голосов
/ 21 июля 2009

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

4 голосов
/ 24 ноября 2009

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

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

John

3 голосов
/ 21 июля 2009

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

2 голосов
/ 23 июля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...