C++ में extern "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
```
मैं समझता हूँ कि यह लिंकिंग और फंक्शन नामों से संबंधित है, लेकिन विवरण समझ नहीं पा रहा। विशेष रूप से मुझे जानना है:
1. C++ में C फंक्शन का उपयोग करते समय `extern "C"` के बिना लिंकिंग एरर क्यों हो सकते हैं?
2. "name mangling" क्या है और यह इस समस्या से कैसे जुड़ा है?
3. डिक्लेरेशन को `#ifdef __cplusplus` में क्यों लपेटा जाता है? अगर मैं C++ में लिख रहा हूँ, तो __cplusplus हमेशा डिफाइन होता है, है ना?
4. क्या मैं अपने C++ फंक्शन के लिए `extern "C"` का उपयोग कर सकता हूँ, अगर मैं चाहता हूँ कि वे C कोड से एक्सेसिबल हों?
सरल उदाहरणों के साथ समझाने के लिए आभारी रहूँगा। मैंने कोशिश की