C++ में extern "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 लाइब्रेरी से फंक्शन क्यों नहीं ढूंढ पाता और "undefined reference" जैसी लिंकिंग एरर क्यों देता है? जबकि मैंने इसे घोषित किया था!
कृपया एक नौसिखिए को समझाएँ: यह कंस्ट्रक्शन वास्तव में क्या करता है, किन मामलों में यह अनिवार्य है, और यह कंपाइलेशन और बिल्ड प्रक्रिया को कैसे प्रभावित करता है?