Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [General] глобальные переменные 
:(
    Опции темы
Mormishka
Дата 17.12.2010, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



Не могу понять, в фортране нельзя делать глобальные переменные?

Код

    logical::exititeration    

    program Console1
    implicit none
    logical::exititeration    

    
    

    print *, 'Hello World'

    end program Console1


Код

1>C:\Users\Александр\Documents\Visual Studio 2008\Projects\17_12_2010\Console1\Console1.f90(4): error #6218: This statement is positioned incorrectly and/or has syntax errors.
1>C:\Users\Александр\Documents\Visual Studio 2008\Projects\17_12_2010\Console1\Console1.f90(5): error #6222: This IMPLICIT statement is not positioned correctly within the scoping unit.
1>C:\Users\Александр\Documents\Visual Studio 2008\Projects\17_12_2010\Console1\Console1.f90(6): error #6418: This name has already been assigned a data type.   [EXITITERATION]
1>C:\Users\Александр\Documents\Visual Studio 2008\Projects\17_12_2010\Console1\Console1.f90(13): error #6785: This name does not match the unit name.   [CONSOLE1]

PM MAIL   Вверх
Фантом
Дата 17.12.2010, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 5
Всего: 49



Можно, но не так. Либо объявляйте переменную там, где это положено (после program) - тогда она будет глобальной для всех внутренних процедур и функций (после contains). Либо описывайте ее в модуле и цепляйте этот модуль везде, где требуется.
PM   Вверх
Mormishka
Дата 18.12.2010, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



Фантом, 

Например, у меня есть переменная i локальная и глобальная. Так правильно?

module m1

integer i

end module m1

Код

program main
use module m1
i=4
call f
contains
subroutine f
i=1
end subroutine f


end main


Это сообщение отредактировал(а) Mormishka - 18.12.2010, 14:00
PM MAIL   Вверх
Фантом
Дата 18.12.2010, 16:02 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 5
Всего: 49



В целом да, хотя в этом коде есть две синтаксические ошибки.  smile Подключение модуля пишется как use m1 (без  module), программа должна завершаться либо как enf program main, либо просто end, но не так, как у Вас.

Кроме этого, такое определение глобальных переменных в некотором смысле избыточно. Если у Вас все состоит из основной программы и contains в том же файле, то можно не делать отдельный модуль и объявить переменную i прямо в заголовке программы. Отдельный модуль необходим тогда, когда Вы используете много процедур и функций, находящихся в разных модулях и файлах.

Ну и заодно один совет. Если Вы хотите пользоваться глобальными переменными - обязательно вставляйте в заголовки всех программ, функций и процедур implicit none (или хотя бы отключайте неявное объявление переменных ключами компиляции). Это и в других случаях не помешает, но тут просто необходимо, иначе Вы замучаетесь с выяснением того, какой является та или иная переменная - глобальной или локальной, но "объявившейся" неявно. 

Например, если в Вашем примере в модуле сделать i переменной типа real, то возникнет интересный казус. Если модуль подключен, то i везде будет типа real. Но если Вы почему-то забудете подключить модуль, то основной файл все равно скомпилируется, но i уже будет типа integer (из-за неявного объявления).
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




[ Время генерации скрипта: 0.0579 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.