Avatar ·

ما الذي يفعله extern "C" في C++ ولماذا هو مطلوب؟

مرحباً بالجميع! أنا أكتب بلغة C++ منذ فترة ليست طويلة، وأثناء العمل مع مكتبات بلغة C (مثل مكتبة رسومية قديمة) أصادف باستمرار بناء `extern "C"`. أراه في ملفات الرأس، لكنني لا أفهم تماماً ما يفعله. على سبيل المثال، لدي هذا الكود: ```cpp // mylib.h #ifdef __cplusplus extern "C" { #endif void my_c_function(int x); #ifdef __cplusplus } #endif ``` أو عندما أضمّن ملف رأس C بنفسي: ```cpp // main.cpp extern "C" { #include "clibrary.h" } ``` قرأت أن هذا له علاقة بـ "name mangling" (تسمية الدوال في الملف الثنائي)، لكنني لا أستطيع فهم كيف يعمل بالضبط. لماذا بدون `extern "C"` لا يستطيع برنامجي العثور على دالة من مكتبة C ويظهر خطأ linkage مثل "undefined reference"؟ مع أنني أعلنتها! اشرحوا لي، من فضلكم، كمبتدئ: ماذا يفعل هذا البناء بالضبط، وفي أي الحالات يكون إلزامياً، وكيف يؤثر على عملية الترجمة والبناء؟