Что не так со следующим кодом FORTRAN 77? - PullRequest
2 голосов
/ 28 июня 2011

Я в целом новичок на Фортране 77, и я не понимаю, почему первый код показывает ошибку, а второй компилируется, когда я ожидаю, что они сделают то же самое.

Первый код (который не 't компилируется и выдает ошибку, ссылаясь на неожиданный оператор объявления данных в z):

program FOO

integer x, y

x = 1
y = 2

integer z 

z = 3

end

Этот код, который на 100% похож по функциональности на первый, компилируется без ошибок

program FOO

integer x, y, z

x = 1
y = 2
z = 3

end

Я также попытался отключить неявные объявления переменных в первом коде без каких-либо эффектов.

Ответы [ 4 ]

7 голосов
/ 28 июня 2011

Фортран - один из тех странных языков "все наверху". Другими словами, это было бы хорошо:

program FOO
    integer x, y
    integer z 
    x = 1
    y = 2
    z = 3
end

, поскольку все спецификации типов находятся перед любым исполняемым кодом. Если вы собираетесь определить переменную, вы должны сначала определить ее. См. здесь , например:

Такие неисполняемые операторы должны быть помещены в начало программы, перед первым исполняемым оператором.

1 голос
/ 28 июня 2011

Для вашей информации: Отключение неявных объявлений переменных просто устраняет способность Фортана делать предположения о типе ваших переменных.

Неявное объявление переменных делает следующие предположения: Любая переменная, начинающаяся с (заглавной или прописной):J, K, L, M или N должны быть целыми.Любая переменная, начинающаяся с любой другой буквы (заглавной или строчной), должна быть РЕАЛЬНОЙ.Это относится только к переменным, которые не имеют явного объявления типа.

Вы можете написать:

program FOO
ijk
ifjkask    
end

, а ijk и ifjkask будут значениями INTEGER.

1 голос
/ 28 июня 2011

@ paxdiablo: вы считаете правильным!

и сообщение об ошибке:

"... неожиданный оператор объявления данных в ..."

все УДАЛИТЬ должныДО первого ЗАЯВЛЕНИЯ происходит.fortran77 действительно "старый", я не уверен, если это будет изменено в F95

1 голос
/ 28 июня 2011

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

например;

integer x, y, z

x = 1
y = 2
z = 3

работает, но

integer x, y

x = 1
y = 2

integer z 

z = 3

не работает.Потому что между двумя целочисленными определениями (integer x, y и integer z), есть переменные, присваивающие.

...