खोज…


मॉड्यूल सिंटैक्स

मॉड्यूल प्रकार की घोषणाओं, डेटा घोषणाओं और प्रक्रियाओं का एक संग्रह है। मूल वाक्यविन्यास है:

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

चर बिंदुओं की तरह, प्रक्रिया बिंदुओं को भी संरक्षित किया जा सकता है, फिर से लक्ष्य संघ के परिवर्तन को रोका जा सकता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow