Нет, это нормально.Все, что вы делаете с оператором use
, - это предоставление доступа к переменным и функциям, определенным в вашем модуле, через use association .Это не то же самое, что объявлять переменные каждый раз, когда они use
'd (однако, на самом деле они повторно объявлены).
Единственное, что следует опасаться, это круговые зависимости , где модуль A
использует модуль B
, а модуль B
использует модуль A
.Это не разрешено
Редактировать: От Меткалфа и др. .Фортран 95/2003 объяснил, стр.72:
Модуль может содержать операторы use
, которые обращаются к другим модулям.Он не должен иметь прямой или косвенный доступ к себе через цепочку операторов use
, например, a
доступа к b
и b
доступа к a
.
, хотя эта цитата непрямо отвечая на ваш вопрос, он повторяет, что на самом деле единственное, что вы не можете сделать, это иметь круговую зависимость.Таким образом, следующее совершенно правильно:
module one_def
implicit none
integer, parameter :: one=1
end module one_def
module two_def
use one_def, only : one
implicit none
integer, parameter :: two=one+one
end module two_def
program test
use one_def, only : one
use two_def, only : two
implicit none
print*, two == one+one ! This prints .True.
end program