के माध्यम से किसी फ़ंक्शन को रेखांकित करता है, तो मान लें कि मेरे पास मेरे प्रोग्राम में और कहीं भी मेरे कोड में कोई फ़ंक्शन है, फ़ंक्शन को फ़ंक्शन पॉइंटर के माध्यम से कॉल किया जाता है। क्या होता है यदि संकलक उस कार्य को इनलाइन करने के लिए हुआ, या संकलक को एहसास होगा कि उस फ़ंक्शन को सौंपा गया फ़ंक्शन पॉइंटर है और इसलिए इसे रेखांकित करने से बचें।क्या होता है यदि कंपाइलर फ़ंक्शन पॉइंटर
उत्तर
जब किसी फ़ंक्शन के लिए पॉइंटर लिया जाता है, तो संकलक फ़ंक्शन के लिए आउट-ऑफ-लाइन बॉडी उत्पन्न करेगा। अन्य कॉल साइटों पर फ़ंक्शन को इनलाइन करना अभी भी संभव है।
ध्यान दें कि inline
चिह्नित एक फ़ंक्शन में सभी टीयू में एक परिभाषा उपलब्ध होनी चाहिए जो इसे संदर्भित करती है, और ये परिभाषाएं समान होंगी। जिसका अर्थ यह है कि कुछ कॉल साइटों पर फ़ंक्शन को इनलाइन करना और दूसरों पर इसे बाहर रखना पूरी तरह से सुरक्षित है।
क्या होता है यदि परिभाषाएं समान नहीं हैं (उदाहरण के लिए कुछ ifdef'd कोड), और लिंकर फ़ंक्शन के कई संस्करण प्राप्त करता है? 'इनलाइन' संभावित रूप से लिंकर द्वारा कमजोर प्रतीक के रूप में देखा जाता है, और आप बस पहले व्यक्ति को प्राप्त करते हैं? –
@ निकोलस विल्सन जो एक विकृत कार्यक्रम होगा। –
@ निकोलस विल्सन जो एक परिभाषा नियम का उल्लंघन करेगा, और इसे स्पष्ट रूप से परिभाषित व्यवहार के रूप में नहीं कहा जाता है। –
अच्छा, यह निश्चित रूप से काम करेगा। मैं नहीं देखता कि इनलाइनिंग कैसे रोकती है। आपके पास बस कुछ कोड है जो फ़ंक्शन को सीधे कॉल करता है, और इसे वहां रेखांकित किया जा सकता है, और आपके पास कुछ कोड है जो एक फ़ंक्शन पॉइंटर के माध्यम से इसे नियमित फ़ंक्शन के रूप में कॉल करता है।
कोई कारण नहीं है कि फ़ंक्शन पॉइंटर का उपयोग इनलाइनिंग को रोकना चाहिए। इनलाइनिंग केस-दर-मामले आधार पर की जाती है और एक सामान्य कार्य निकाय के साथ मौजूद हो सकती है। तो एक समारोह को एक स्थान पर रेखांकित किया जा सकता है, और दूसरे में बुलाया जा सकता है।
संकलक, इसलिए, इनलाइन कहां है और यह अभी भी आपके फ़ंक्शन पॉइंटर के लिए कॉल करने योग्य फ़ंक्शन का उत्पादन करेगा।
न केवल संकलक इनलाइन "समारोह के अन्य कॉल", लेकिन यह अगर यह काफी समझता समारोह संकेत के माध्यम से भी इनलाइन कॉल जो समारोह के बारे में वास्तव में किया जा रहा है हो सकता है, कुछ इस तरह:
typedef void (*funcptr)();
void somefunc()
{
... do stuff here ...
}
void indirection(funcptr *f)
{
f();
}
void call_with_ptr()
{
funcptr f = somefunc();
for(int i = 0; i < 100; i++)
{
indirection(f);
}
}
मेरे पास इस तरह के कोड थे, और यह संकेतों को रेखांकित किया, और फ़ंक्शन पॉइंटर का उपयोग किए बिना किसी भी कॉल को कॉल किया।
लेकिन निश्चित रूप से, यह मानता है कि संकलक कोड से कौन सा फ़ंक्शन कहलाता है - जो इस मामले में स्पष्ट है, लेकिन यदि रनटाइम निर्णय शामिल हैं, तो ऐसा नहीं हो सकता है।
- 1. फ़ंक्शन पॉइंटर का डिफ्रेंसिंग कैसे होता है?
- 2. पॉइंटर-टू-पॉइंटर क्रैश होता है जहां पॉइंटर
- 3. क्या होता है यदि php.ini गुम है?
- 4. फ़ंक्शन पॉइंटर का पॉइंटर मान क्या दर्शाता है?
- 5. क्या होता है यदि किसी स्मार्ट पॉइंटर द्वारा आयोजित ऑब्जेक्ट कहीं और हटा दिया जाता है?
- 6. फ़ंक्शन पॉइंटर
- 7. फ़ंक्शन पॉइंटर बनाम फ़ंक्शन कॉल के बीच क्या अंतर है?
- 8. फ़ंक्शन पॉइंटर
- 9. फ़ंक्शन पॉइंटर
- 10. फ़ंक्शन पॉइंटर
- 11. सी # फ़ंक्शन पॉइंटर?
- 12. फ़ंक्शन पॉइंटर बनाएं जो एक फ़ंक्शन पॉइंटर को
- 13. चेतावनी जब पॉइंटर और पॉइंटर-टू-फ़ंक्शन
- 14. सी फ़ंक्शन पॉइंटर अनुवाद?
- 15. फंक्शन पॉइंटर जो एक फ़ंक्शन पॉइंटर
- 16. पॉइंटर-टू-फ़ंक्शन
- 17. सी ++ फ़ंक्शन से डबल पॉइंटर लौटता है .... क्या गलत है?
- 18. फ़ंक्शन पास पॉइंटर C++
- 19. कास्टिंग सदस्य फ़ंक्शन पॉइंटर
- 20. सी ++ फ़ंक्शन पॉइंटर पैरामीटर
- 21. यदि मैं जावास्क्रिप्ट फ़ंक्शन में पैरामीटर पास नहीं करता तो क्या होता है?
- 22. फ़ंक्शन पॉइंटर के आकार के बारे में क्या गारंटी है?
- 23. फ़ंक्शन पॉइंटर के बजाय मान (?) द्वारा फ़ंक्शन पास करें?
- 24. सदस्य फ़ंक्शन के लिए फ़ंक्शन पॉइंटर
- 25. क्या होता है यदि कोई साझा_प्टर का निर्माता विफल रहता है?
- 26. क्या होता है यदि ["x"! = X] बाश में करते हैं?
- 27. क्या होता है यदि मैं एक एएसपी.NET वेब पेज
- 28. एक फ़ंक्शन पॉइंटर पिन करें
- 29. किसी फ़ंक्शन में पॉइंटर का आकार एक सूचक के आकार से किसी सदस्य फ़ंक्शन से अलग क्यों होता है?
- 30. फ़ंक्शन पैरामीटर: कॉपी या पॉइंटर?
हर्ब सटर के [इनलाइन रेडक्स] (http://www.drdobbs.com/inline-redux/184403879) देखें। –