Fortran
मॉड्यूल का उपयोग
खोज…
मॉड्यूल सिंटैक्स
मॉड्यूल प्रकार की घोषणाओं, डेटा घोषणाओं और प्रक्रियाओं का एक संग्रह है। मूल वाक्यविन्यास है:
module module_name
use other_module_being_used
! The use of implicit none here will set it for the scope of the module.
! Therefore, it is not required (although considered good practice) to repeat
! it in the contained subprograms.
implicit none
! Parameters declaration
real, parameter, public :: pi = 3.14159
! The keyword private limits access to e parameter only for this module
real, parameter, private :: e = 2.71828
! Type declaration
type my_type
integer :: my_int_var
end type
! Variable declaration
integer :: my_integer_variable
! Subroutines and functions belong to the contains section
contains
subroutine my_subroutine
!module variables are accessible
print *, my_integer_variable
end subroutine
real function my_func(x)
real, intent(in) :: x
my_func = x * x
end function my_func
end module
अन्य प्रोग्राम इकाइयों से मॉड्यूल का उपयोग करना
किसी अन्य प्रोग्राम यूनिट (मॉड्यूल, प्रक्रिया या प्रोग्राम) से एक मॉड्यूल में घोषित संस्थाओं तक पहुंचने के लिए, मॉड्यूल का use
विवरण के साथ किया जाना चाहिए।
module shared_data
implicit none
integer :: iarray(4) = [1, 2, 3, 4]
real :: rarray(4) = [1., 2., 3., 4.]
end module
program test
!use statements most come before implicit none
use shared_data
implicit none
print *, iarray
print *, rarray
end program
use
कथन केवल चयनित नामों के आयात का समर्थन करता है
program test
!only iarray is accessible
use shared_data, only: iarray
implicit none
print *, iarray
end program
नाम-सूची का उपयोग करके अलग-अलग नामों से भी एंट्री की जा सकती है:
program test
!only iarray is locally renamed to local_name, rarray is still acessible
use shared_data, local_name => iarray
implicit none
print *, local_name
print *, rarray
end program
इसके अलावा, नाम बदलने को only
विकल्प के साथ जोड़ा जा सकता है
program test
use shared_data, only : local_name => iarray
end program
इतना है कि केवल मॉड्यूल इकाई iarray
पहुँचा है, लेकिन इसका स्थानीय नाम local_name
।
यदि निजी के रूप में नाम चिह्न के आयात के लिए चुना गया है तो आप उन्हें अपने कार्यक्रम में आयात नहीं कर सकते।
आंतरिक मॉड्यूल
फोरट्रान 2003 ने आंतरिक मॉड्यूल पेश किए जो विशेष नामित स्थिरांक, व्युत्पन्न प्रकार और मॉड्यूल प्रक्रियाओं तक पहुंच प्रदान करते हैं। अब पांच मानक आंतरिक मॉड्यूल हैं:
-
ISO_C_Binding
; सी इंटरऑपरेबिलिटी का समर्थन करना; -
ISO_Fortran_env
; फोरट्रान पर्यावरण का विस्तार; -
IEEE_Exceptions
,IEEE_Arithmetic
औरIEEE_Features
; तथाकथित IEEE अंकगणितीय सुविधा का समर्थन करना।
ये आंतरिक मॉड्यूल, फोरट्रान लाइब्रेरी का हिस्सा हैं और अन्य मॉड्यूल की तरह एक्सेस किए जाते हैं, सिवाय इसके कि use
कथन में आंतरिक प्रकृति स्पष्ट रूप से बताई गई हो:
use, intrinsic :: ISO_C_Binding
यह सुनिश्चित करता है कि आंतरिक मॉड्यूल का उपयोग तब किया जाता है जब उपयोगकर्ता द्वारा प्रदान किया गया मॉड्यूल समान नाम उपलब्ध हो। इसके विपरीत
use, non_intrinsic :: ISO_C_Binding
यह सुनिश्चित करता है कि एक ही उपयोगकर्ता-प्रदान मॉड्यूल (जो सुलभ होना चाहिए) को आंतरिक मॉड्यूल के बजाय एक्सेस किया जाता है। मॉड्यूल प्रकृति के बिना के रूप में निर्दिष्ट
use ISO_C_Binding
एक उपलब्ध गैर-आंतरिक मॉड्यूल आंतरिक मॉड्यूल पर पसंद किया जाएगा।
आंतरिक आईईईई मॉड्यूल अन्य मॉड्यूल से अलग हैं कि एक स्कूपिंग यूनिट में उनकी पहुंच वहां परिभाषित किसी भी संस्था के संदर्भ के बिना भी कोड के व्यवहार को बदल सकती है।
पहुँच नियंत्रण
एक मॉड्यूल में घोषित प्रतीकों की पहुंच को private
और public
विशेषताओं और विवरण का उपयोग करके नियंत्रित किया जा सकता है।
कथन प्रपत्र का सिंटैक्स:
!all symbols declared in the module are private by default
private
!all symbols declared in the module are public by default
public
!symbols in the list will be private
private :: name1, name2
!symbols in the list will be public
public :: name3, name4
गुण प्रपत्र का सिंटैक्स:
integer, parameter, public :: maxn = 1000
real, parameter, private :: local_constant = 42.24
सार्वजनिक प्रतीकों को मॉड्यूल का उपयोग करके प्रोग्राम इकाइयों से एक्सेस किया जा सकता है, लेकिन निजी प्रतीक नहीं कर सकते।
जब कोई विनिर्देशन का उपयोग नहीं किया जाता है, तो डिफ़ॉल्ट public
।
डिफ़ॉल्ट पहुँच विनिर्देशन का उपयोग करना
private
या
public
इकाई-घोषणा-सूची के साथ अलग - अलग पहुंच निर्दिष्ट करके बदला जा सकता है
public :: name1, name2
या विशेषताओं का उपयोग करना।
यह अभिगम नियंत्रण दूसरे मॉड्यूल से आयातित प्रतीकों को भी प्रभावित करता है:
module mod1
integer :: var1
end module
module mod2
use mod1, only: var1
public
end module
program test
use mod2, only: var1
end program
संभव है, लेकिन
module mod1
integer :: var1
end module
module mod2
use mod1, only: var1
public
private :: var1
end module
program test
use mod2, only: var1
end program
संभव नहीं है क्योंकि var
mod2
में निजी है।
संरक्षित मॉड्यूल संस्थाएं
मॉड्यूल संस्थाओं को एक्सेस कंट्रोल ( public
या private
होने के नाते) की अनुमति देने के साथ-साथ मॉड्यूल संस्थाओं की protect
विशेषता भी हो सकती है। एक सार्वजनिक संरक्षित इकाई संबद्ध उपयोग की जा सकती है, लेकिन प्रयुक्त इकाई इसके उपयोग पर प्रतिबंध के अधीन है।
module mod
integer, public, protected :: i=1
end module
program test
use mod, only : i
print *, i ! We are allowed to get the value of i
i = 2 ! But we can't change the value
end program test
सार्वजनिक संरक्षित लक्ष्य को इसके मॉड्यूल के बाहर इंगित करने की अनुमति नहीं है
module mod
integer, public, target, protected :: i
end module mod
program test
use mod, only : i
integer, pointer :: j
j => i ! Not allowed, even though we aren't changing the value of i
end program test
एक मॉड्यूल में सार्वजनिक संरक्षित पॉइंटर के लिए प्रतिबंध अलग-अलग हैं। क्या संरक्षित है सूचक की संघ स्थिति है
module mod
integer, public, target :: j
integer, public, protected, pointer :: i => j
end module mod
program test
use mod, only : i
i = 2 ! We may change the value of the target, just not the association status
end program test
चर बिंदुओं की तरह, प्रक्रिया बिंदुओं को भी संरक्षित किया जा सकता है, फिर से लक्ष्य संघ के परिवर्तन को रोका जा सकता है।