| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Fortran > [General] глобальные переменные |
| Автор: Mormishka 17.12.2010, 21:23 | ||||
Не могу понять, в фортране нельзя делать глобальные переменные?
|
| Автор: Фантом 17.12.2010, 21:43 |
| Можно, но не так. Либо объявляйте переменную там, где это положено (после program) - тогда она будет глобальной для всех внутренних процедур и функций (после contains). Либо описывайте ее в модуле и цепляйте этот модуль везде, где требуется. |
| Автор: Mormishka 18.12.2010, 14:00 | ||
| Фантом, Например, у меня есть переменная i локальная и глобальная. Так правильно? module m1 integer i end module m1
|
| Автор: Фантом 18.12.2010, 16:02 |
| В целом да, хотя в этом коде есть две синтаксические ошибки. Кроме этого, такое определение глобальных переменных в некотором смысле избыточно. Если у Вас все состоит из основной программы и contains в том же файле, то можно не делать отдельный модуль и объявить переменную i прямо в заголовке программы. Отдельный модуль необходим тогда, когда Вы используете много процедур и функций, находящихся в разных модулях и файлах. Ну и заодно один совет. Если Вы хотите пользоваться глобальными переменными - обязательно вставляйте в заголовки всех программ, функций и процедур implicit none (или хотя бы отключайте неявное объявление переменных ключами компиляции). Это и в других случаях не помешает, но тут просто необходимо, иначе Вы замучаетесь с выяснением того, какой является та или иная переменная - глобальной или локальной, но "объявившейся" неявно. Например, если в Вашем примере в модуле сделать i переменной типа real, то возникнет интересный казус. Если модуль подключен, то i везде будет типа real. Но если Вы почему-то забудете подключить модуль, то основной файл все равно скомпилируется, но i уже будет типа integer (из-за неявного объявления). |