मैंने पढ़ा है कि एक फ़ंक्शन पॉइंटर को डेटा पॉइंटर में कनवर्ट करना और इसके विपरीत अधिकांश प्लेटफार्मों पर काम करता है, लेकिन काम करने की गारंटी नहीं है। यह एक केस क्यों है? क्या दोनों को मुख्य स्मृति में केवल पते नहीं होना चाहिए और इसलिए संगत होना चाहिए?
void
। फ़ंक्शन पॉइंटर का रूपांतरण void *
प्रतिनिधित्व में परिवर्तन नहीं करेगा। इस void *
तरह के रूपांतरण से उत्पन्न मूल्य को मूल फ़ंक्शन पॉइंटर प्रकार में परिवर्तित किया जा सकता है, एक स्पष्ट कलाकारों का उपयोग करके, बिना जानकारी के नुकसान के। नोट : ISO C मानक को इसकी आवश्यकता नहीं है, लेकिन इसके लिए POSIX अनुरूपता आवश्यक है।
dlsym()
- 'एप्लिकेशन उपयोग' अनुभाग के अंत पर ध्यान दें जहां यह कहता है: ध्यान दें कि एक void *
पॉइंटर से एक फ़ंक्शन पॉइंटर में रूपांतरण इस रूप में है: fptr = (int (*)(int))dlsym(handle, "my_function");
आईएसओ सी मानक द्वारा परिभाषित नहीं है। इस मानक के अनुरूप कार्यान्वयन पर सही ढंग से काम करने के लिए इस रूपांतरण की आवश्यकता होती है।