"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > هل يمكنك إرسال مؤشرات فارغة إلى مؤشرات الوظائف في C++؟

هل يمكنك إرسال مؤشرات فارغة إلى مؤشرات الوظائف في C++؟

تم النشر بتاريخ 2024-11-08
تصفح:270

Can You Cast void Pointers to Function Pointers in C  ?

تحويل المؤشرات الفارغة إلى مؤشرات دالة في لغة C

تحويل المؤشرات الفارغة التي يتم إرجاعها بواسطة وظائف مثل dlsym() إلى مؤشرات وظيفية ليس أمرًا سهلاً في لغة C . بشكل افتراضي، هذا الإرسال المباشر محظور في C 98/03.

في C 98/03، كانت مؤشرات الفراغ * مخصصة للإشارة إلى الكائنات، ليست دالة أو مؤشرات أعضاء.

الدعم المشروط في C 0x في C 0x، يتم دعم صب الفراغ * إلى مؤشرات الوظيفة بشكل اختياري من خلال التطبيقات. إذا كان مدعومًا، يجب أن يتوافق السلوك مع المعيار.

الحلول المعتمدة على التنفيذ

على الرغم من عدم السماح بالإرسال المباشر، إلا أن هذه الحلول قد تعمل على معظم الأنظمة الأساسية:

    إعادة تفسير Cast:
  • fptr my_fptr = reinterpret_cast(reinterpret_cast(gptr));
fptr my_fptr = reinterpret_cast(reinterpret_cast(gptr));
إعادة التفسير المتغير:
  • fptr my_ptr = 0; reinterpret_cast(my_ptr) = gptr;
fptr my_ptr = 0;
reinterpret_cast(my_ptr) = gptr;

ملاحظة تحذيرية

تتضمن هذه الحلول سلوكًا غير محدد ويجب استخدامها بحذر.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3