एक पॉइंटर को एक पूर्णांक में परिवर्तित करना: 64-बिट मशीनों के लिए दोबारा गौर किया गया
सी/सी में, 64- से निपटते समय एक संभावित नुकसान पॉइंटर्स को संभालते समय बिट मशीनें उत्पन्न होती हैं। पारंपरिक रूपांतरण तकनीक, जैसे कि नीचे दिखाया गया है, के परिणामस्वरूप सटीक त्रुटियां हो सकती हैं:
void function(MESSAGE_ID id, void* param) { if (id == FOO) { int real_param = (int)param; // ... } }
अद्यतन कास्टिंग तकनीकों के साथ समाधान
इस समस्या को सुधारने और 32-बिट और 64-बिट सिस्टम दोनों पर निर्बाध संगतता सुनिश्चित करने के लिए, एक आधुनिक सी दृष्टिकोण की सिफारिश की जाती है:
#includevoid *p; auto i = reinterpret_cast<:uintptr_t>(p);
सही डेटा प्रकार चुनना
किसी पॉइंटर को पूर्णांक के रूप में संग्रहीत करते समय, चयन करना महत्वपूर्ण है उपयुक्त डेटा प्रकार. इस प्रयोजन के लिए, uintptr_t प्रकार सबसे उपयुक्त है।
// C 11 std::uintptr_t i; // C 03 extern "C" { #include} uintptr_t i; // C99 #include uintptr_t i;
सही कास्टिंग ऑपरेटर को नियुक्त करना
सी में, विभिन्न प्रकार के कास्ट मौजूद हैं। इस विशिष्ट परिदृश्य के लिए, reinterpret_cast सबसे उपयुक्त विकल्प है।
// C 11 auto i = reinterpret_cast<:uintptr_t>(p); // C 03 uintptr_t i = reinterpret_cast(p); // C uintptr_t i = (uintptr_t)p;
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3