Avatar ·

ما الذي يفعله `extern "C"` في C++ ولماذا هو مطلوب عند العمل مع مكتبات C؟

مرحبًا! بدأت في تعلم C++ وواجهت البناء `extern "C"` الذي أراه كثيرًا في ملفات الرأس. على سبيل المثال، في مكتبات مثل SDL أو عند ربط دوال C قديمة. إليك مثال وجدته في مقال: ```cpp // my_header.h #ifdef __cplusplus extern "C" { #endif void my_c_function(int x); int another_c_function(const char* str); #ifdef __cplusplus } #endif ``` أفهم أن هذا له علاقة بالربط (linking) وأسماء الدوال، لكني لا أستطيع فهم التفاصيل. على وجه التحديد، يهمني: 1. لماذا بدون `extern "C"` قد تحدث أخطاء ربط عند استخدام دوال C في C++؟ 2. ما هو "name mangling" وكيف يرتبط بهذه المشكلة؟ 3. لماذا نلف التعريفات في `#ifdef __cplusplus`؟ أليس __cplusplus معرّفًا دائمًا إذا كنت أكتب بلغة C++؟ 4. هل يمكن استخدام `extern "C"` لدوال C++ الخاصة بي إذا أردت أن تكون متاحة من كود C؟ سأكون ممتنًا لشرح مع أمثلة بسيطة. حاولت...