नहीं, यह करना ठीक है। आप use
कथन के साथ कर रहे हैं, के माध्यम से अपने मॉड्यूल में परिभाषित चर और कार्यों तक पहुंच प्रदान कर रहा है का उपयोग करें। यह हर बार use
'डी (वे वास्तव में फिर से अव्यवस्थित हैं) वेरिएबल घोषित करने की तरह नहीं है।
केवल एक चीज को सावधान रहने की की परिपत्र निर्भरता, जहां मॉड्यूल 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
नहीं, ऐसा करना ठीक है। आप 'उपयोग' कथन के साथ कर रहे हैं वे सबप्रोग्राम स्कोप में चर ला रहे हैं। यह हर बार 'उपयोग' किए जाने वाले चर घोषित करने की तरह नहीं है। सावधान रहना एकमात्र चीज है * परिपत्र निर्भरता *, जहां मॉड्यूल 'ए' मॉड्यूल 'बी' का उपयोग करता है और मॉड्यूल 'बी 'मॉड्यूल' ए' का उपयोग करता है। इसकी अनुमति नहीं है। – Chris
धन्यवाद, इसे एक उत्तर दें ताकि मैं आपको एक चेक मार्क दे सकूं! – drjrm3
धन्यवाद, मैंने कुछ और जानकारी भी की है और जोड़ा है। – Chris