खोज…


आंतरिक / मॉड्यूल उपप्रोग्राम और स्पष्ट इंटरफेस

एक उपप्रोग्राम (जो एक प्रक्रिया को परिभाषित करता है), या तो subroutine या function ; यह एक आंतरिक दौरान subprogram- होने के लिए कहा अगर यह कहा जाता है या एक ही से शुरू हो जाती है है program या Subprogram कि contains , यह इस प्रकार है

program my_program

  ! declarations
  ! executable statements,
  ! among which an invocation to
  ! internal procedure(s),
  call my_sub(arg1,arg2,...)
  fx = my_fun(xx1,xx2,...)

contains
  
  subroutine my_sub(a1,a2,...)
    ! declarations
    ! executable statements
  end subroutine my_sub

  function my_fun(x1,x2,...) result(f)
    ! declarations
    ! executable statements
  end function my_fun

end program my_program

इस मामले में कंपाइलर को किसी भी आंतरिक प्रक्रिया के बारे में सब पता चल जाएगा, क्योंकि यह प्रोग्राम यूनिट को समग्र रूप से मानता है। विशेष रूप से, यह प्रक्रिया के interface को "देखेगा", जो है

  • चाहे वह कोई function या subroutine ,
  • जो a1 , a2 , x1 , x2 , ... के नाम और गुण हैं,
  • जो परिणाम f (एक function के मामले में) के गुण हैं।

इंटरफ़ेस ज्ञात होने के कारण, कंपाइलर यह जांच सकता है कि क्या वास्तविक तर्क ( arg1 , arg2 , xx1 , xx2 , fx , ...) डमी तर्क ( a1 , a2 , x1 , x2 , f , ..) के साथ प्रक्रिया मैच में पास हो गए हैं या नहीं। ।)।

इस मामले में हम कहते हैं कि इंटरफ़ेस स्पष्ट है

एक उपप्रोग्राम को मॉड्यूल उपप्रोग्राम कहा जाता है, जब यह युक्त मॉड्यूल में एक बयान द्वारा खुद को लगाया जाता है,

module my_mod

  ! declarations

contains
  
  subroutine my_mod_sub(b1,b2,...)
    ! declarations
    ! executable statements
    r = my_mod_fun(b1,b2,...)
  end subroutine my_sub

  function my_mod_fun(y1,y2,...) result(g)
    ! declarations
    ! executable statements
  end function my_fun

end module my_mod

या किसी अन्य प्रोग्राम यूनिट में एक स्टेटमेंट के द्वारा जो उस मॉड्यूल का use करता है,

program my_prog

  use my_mod

  call my_mod_sub(...)

end program my_prog

जैसा कि पूर्ववर्ती स्थिति में, कंपाइलर सबप्रोग्राम के बारे में सब कुछ जान जाएगा और इसलिए, हम कहते हैं कि इंटरफ़ेस स्पष्ट है

बाहरी उपप्रोग्राम और अंतर्निहित इंटरफेस

एक उपप्रोग्राम को बाहरी कहा जाता है जब यह मुख्य कार्यक्रम में शामिल नहीं होता है, न ही एक मॉड्यूल या एंटेरोपर उपप्रोग्राम में। विशेष रूप से इसे फोरट्रान के अलावा एक प्रोग्रामिंग भाषा के माध्यम से परिभाषित किया जा सकता है।

जब एक बाहरी उपप्रोग्राम का आह्वान किया जाता है, तो संकलक अपने कोड तक नहीं पहुंच सकता है, इसलिए संकलक के लिए स्वीकार्य सभी जानकारी अंतर्निहित रूप से कॉलिंग प्रोग्राम के कॉलिंग स्टेटमेंट में होती है और प्रकार में एक्यूट तर्कों के गुण होते हैं, न कि डमी तर्क ( जिसकी घोषणा संकलक के लिए अज्ञात है)। इस मामले में हम कहते हैं कि इंटरफ़ेस निहित है

external कथन का उपयोग यह निर्दिष्ट करने के लिए किया जा सकता है कि एक प्रक्रिया का नाम बाहरी प्रक्रिया के सापेक्ष है,

external external_name_list

लेकिन फिर भी, इंटरफ़ेस निहित है।

एक interface ब्लॉक का उपयोग बाहरी प्रक्रिया के इंटरफ़ेस को निर्दिष्ट करने के लिए किया जा सकता है,

interface
  interface_body
end interface

जहाँ interface_body आमतौर पर प्रक्रिया हेडर की एक सटीक प्रतिलिपि है, जिसके बाद इसके सभी तर्कों की घोषणा की जाती है और, यदि यह एक कार्य है, परिणाम का।

उदाहरण के लिए, फ़ंक्शन WindSpeed

real function WindSpeed(u, v)
  real, intent(in) :: u, v
  WindSpeed = sqrt(u*u + v*v)
end function WindSpeed

आप निम्न इंटरफ़ेस लिख सकते हैं

interface
  real function WindSpeed(u, v)
    real, intent(in) :: u, v
  end function WindSpeed
end interface


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