Fortran
स्पष्ट और अंतर्निहित इंटरफेस
खोज…
आंतरिक / मॉड्यूल उपप्रोग्राम और स्पष्ट इंटरफेस
एक उपप्रोग्राम (जो एक प्रक्रिया को परिभाषित करता है), या तो 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