ما الذي يفعله 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"؟ مع أنني أعلنتها!
اشرحوا لي، من فضلكم، كمبتدئ: ماذا يفعل هذا البناء بالضبط، وفي أي الحالات يكون إلزامياً، وكيف يؤثر على عملية الترجمة والبناء؟