2011-01-18 17 views
12

Fortran 90 Specification निर्दिष्ट क्यों करता है (5.2.8) कि TARGET कीवर्ड को POINTER को संबद्ध करने के लिए उपयोग किया जाना चाहिए? हर प्रकार एक वैध लक्ष्य क्यों नहीं है?फ़ोरट्रान पॉइंटर को एक लक्ष्य की आवश्यकता क्यों होती है?

उदाहरण के लिए,

 
INTEGER, POINTER :: px 
INTEGER, TARGET :: x 
x = 5 
px => x 
मान्य सिंटैक्स लेकिन
 
INTEGER, POINTER :: px 
INTEGER :: x 
x = 5 
px => x 
मान्य नहीं है।

यह क्यों होना चाहिए?

उत्तर

15

एक आइटम जिसे इंगित किया जा सकता है उसे किसी अन्य आइटम पर अलिया किया जा सकता है, और संकलक को इसके लिए अनुमति देनी चाहिए। लक्ष्य विशेषता के बिना आइटम को अलिया नहीं किया जाना चाहिए और संकलक इस पर आधारित धारणाएं बना सकते हैं और इसलिए अधिक कुशल कोड उत्पन्न कर सकते हैं।

+0

मेरी पिछली टिप्पणी सटीक नहीं थी। सूचक/लक्ष्य संघ कुछ वास्तव में मुश्किल परिस्थितियों का कारण बन सकता है। अगर आप फोरट्रान में पॉइंटर/लक्ष्य एसोसिएशन प्रथाओं के साथ अनुभवहीन हैं तो मैं कुछ और पढ़ने की सलाह देता हूं। देखें, उदाहरण के लिए, यह लिंक https://software.intel.com/en-us/forums/intel-fortran-compiler-for-linux-and-mac-os-x/topic/709550 –

2

फोर्टन में पॉइंटर्स सी में पॉइंटर्स से अलग हैं। फोर्टन में 9 0 पॉइंटर्स को लक्ष्य रखने जैसे कुछ प्रतिबंध प्रदान किए गए थे। यह गति मुद्दे को हल करने और सूचक उपयोग को सुरक्षित रखने के लिए किया गया था। हालांकि एक कॉल आवंटित पॉइंटर्स बनाता है जिसे लक्ष्य निर्दिष्ट करने की आवश्यकता नहीं होती है। गहरा खोदना और आप उन्हें मिल जाएगा !!

0

बेहतर संकलक अनुकूलन के लिए। जब आपका कोड 1K-100K कोर गति पर चलता है तो इससे कोई फर्क पड़ता है।

बीटीडब्ल्यू टैरगेट हमेशा उपयोग नहीं किया जाता है। उदाहरण के लिए जब परिस्थितियों को आवंटित करने के लिए पॉइंटर का उपयोग किया जा रहा है।

... 
real, pointer :: p(:), x 
... 
allocate(p(15)) 
... 
x => p(1:5) 
... 
nullify(x) 
deallocate(p) 
... 
+0

कंपाइलर के आधार पर, इसे काम करने के लिए आपको आवंटित करना होगा (x (5))। – AlanSE

+0

@AlanSe कौन सा संकलक कृपया? लाइनों का दिखाया गया सेट सही लगता है। –

+2

@ user49734 TARGET यहां आवश्यक नहीं है (और यहां तक ​​कि वर्जित) क्योंकि एक सूचक हमेशा "लक्ष्यीकरण" होता है –

संबंधित मुद्दे