क्यों नहीं extern "C"
एक फ़ंक्शन के लिए निर्दिष्ट किया जाना चाहिए जिसे सी फ़ंक्शन के रूप में परिभाषित करने की आवश्यकता है? फ़ाइल को सी स्रोत के रूप में संकलित करते समय संकलक पर इसका क्या प्रभाव होगा?क्या हम #ifdef __cplusplus के बिना सी फ़ाइल में बाहरी "सी" का उपयोग कर सकते हैं?
यदि सी कंपाइलर पर कोई प्रभाव नहीं पड़ता है, तो क्या हम #ifdef __cplusplus
को हटाकर नीचे एक शीर्षलेख फ़ाइल में फ़ंक्शन को परिभाषित नहीं कर सकते हैं?
extern "C" {
int MyFunc();
}
An answer to another question का कहना है कि #ifdef
जरूरत है, लेकिन मुझे समझ नहीं आता क्यों:
के बारे में # 2: __cplusplus किसी भी संकलन इकाई है कि सी ++ संकलक के माध्यम से चलाया जा रहा के लिए परिभाषित किया जाएगा। आम तौर पर, इसका मतलब है .cpp फ़ाइलें और उस फ़ाइल को उस .cpp फ़ाइल द्वारा शामिल किया जा रहा है। अलग-अलग संकलन इकाइयों में शामिल होने पर, वही .h (या .hh या .hpp या what-have-you) को अलग-अलग समय में सी या सी ++ के रूप में व्याख्या किया जा सकता है। यदि आप सी प्रतीक नामों को संदर्भित करने के लिए .h फ़ाइल में प्रोटोटाइप चाहते हैं, तो उनके पास C12+ के रूप में व्याख्या किए जाने पर
extern "C"
होना चाहिए, और उनके पासextern "C"
नहीं होना चाहिए जब सी के रूप में व्याख्या की जा रही हो - इसलिए#ifdef __cplusplus
जांच।
धन्यवाद। मुझे नहीं पता था कि यह एक सी ++ निर्माण था। – Alexander