2013-05-05 8 views
5

इस उत्तर में https://stackoverflow.com/a/4193698/738811 यह लिखा गया है कि "डिफ़ॉल्ट रूप से इनलाइन फ़ंक्शंस में बाहरी संबंध होता है"। हालांकि डिफ़ॉल्ट रूप से इनलाइन चीज़ों के खिलाफ लिंक करना संभव नहीं है। तो क्या कहना है कि इनलाइन फ़ंक्शंस में बाहरी संबंध है?इनलाइन फ़ंक्शंस और बाहरी लिंक

उत्तर

5

किसी नाम के लिंक के साथ किसी विशेष वस्तु या फ़ंक्शन को संदर्भित करने के लिए नाम या कहां परिभाषित किया जा सकता है, इसके साथ कुछ भी नहीं है।

फ़ंक्शन इनलाइन घोषित करने से यह रेखांकित नहीं किया जाता है; यह केवल एक परिभाषा नियम को आराम देता है जिसमें प्रत्येक अनुवाद इकाई में परिभाषा की अनुमति दी जाती है जिसमें इसे उपयोग किया जाता है (और प्रत्येक अनुवाद इकाई में इसे एक की आवश्यकता होती है), जिससे इनलाइन करना आसान हो जाता है। यह एक गैर-इनलाइन संस्करण उत्पन्न नहीं करता है, अगर संकलक किसी विशेष कॉल को इनलाइन करने का निर्णय नहीं लेता है, या यदि आप इसका पता लेते हैं।

तो "बाहरी संबंध" और "इनलाइन" अनन्य नहीं हैं; "बाहरी संबंध" का अर्थ है कि फ़ंक्शन को किसी भी अनुवाद इकाई में संदर्भित किया जा सकता है, और "इनलाइन" का अर्थ है कि इसे किसी भी अनुवाद इकाई में परिभाषित किया जाना चाहिए जो इसे कॉल करता है।

0

शायद इसे व्यक्त करने का एक बेहतर तरीका यह है कि "यदि लिंक आवश्यक है, तो यह बाहरी होगा"। मतलब, यदि आप इनलाइन फ़ंक्शन का पता लेते हैं, तो वह पता बाहरी रूप से दिखाई देगा (मॉड्यूल के लिए स्थिर नहीं)।

0

इनलाइन फ़ंक्शंस इनलाइन विस्तारित नहीं हैं। जब वे नहीं होते हैं, तो भाषा परिभाषा की आवश्यकता होती है कि फ़ंक्शन की केवल एक प्रति हो।

0

इनलाइन फ़ंक्शन आमतौर पर अन्य संकलन इकाइयों से "लिंक करने योग्य" होते हैं। वे इनलाइन कार्यों के रूप में नहीं दिखाई देंगे। संकलित फ़ाइल में फ़ंक्शन की एक प्रति है। यह मुफ्त इनलाइन फ़ंक्शंस पर लागू होता है। क्लास सदस्य फ़ंक्शंस आमतौर पर "गैर-इनलाइन" उपयोग के लिए फ़ंक्शन की प्रति प्राप्त नहीं करते हैं। अच्छे लिंकर्स कोड को "मृत कोड" के रूप में भी हटा देंगे यदि इसे कभी भी संदर्भित नहीं किया जाता है।

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