C अभी भी आसपास की सबसे पुरानी भाषाओं में से एक है। इसका ABI सरल है, और वस्तुतः आज भी उपयोग में आने वाला प्रत्येक ऑपरेटिंग सिस्टम इसमें लिखा गया है । जबकि उन OS में से कुछ में C # /। NET या जो कुछ भी शीर्ष पर सामान जोड़ा जा सकता है, नीचे वे C में बहुत अधिक स्टैक्ड हैं।
इसका मतलब यह है कि, ओएस द्वारा प्रदान की गई कार्यक्षमता का उपयोग करने के लिए , लगभग हर प्रोग्रामिंग भाषा को वैसे भी सी पुस्तकालयों के साथ इंटरफेस करने की आवश्यकता थी । पर्ल, जावा, सी ++, वे सभी मूल रूप से , तरीके "बात सी 'के लिए प्रदान करते हैं, क्योंकि वे अगर वे हर एक पहिया है एक नए अंदाज़ में नहीं करना चाहता था के लिए था।
यह C लैटिन को प्रोग्रामिंग लैंग्वेज बनाता है। (उस रूपक से पहले कितने साल का इंटरनेट "प्रोगामिंग लैंग्वेज की अंग्रेजी" होना है?)
जब आप अपनी लाइब्रेरी को C में लिख रहे होते हैं, तो आपको मुफ्त (जाहिर है) के लिए C- संगत इंटरफ़ेस मिलता है। यदि आप अपनी लाइब्रेरी को C ++ में लिख रहे हैं, तो आप सी बाइंडिंग प्राप्त कर सकते हैं, extern "C"घोषणाओं के अनुसार।
हालाँकि , आप उन बाइंडिंग को केवल कार्यक्षमता के लिए प्राप्त कर सकते हैं जिन्हें C में व्यक्त किया जा सकता है ।
इसलिए आपकी लाइब्रेरी API का उपयोग नहीं कर सकती ...
- टेम्पलेट्स,
- कक्षाएं,
- अपवाद हैं,
- वस्तुओं को लेने या लौटाने का कोई कार्य ।
एक साधारण उदाहरण के लिए, आप अपने निर्यात कार्यों बनाने के लिए की आवश्यकता होगी लेने और वापसी सरणियों ( []) के बजाय std::vector(या std::stringउस बात के लिए)।
इसलिए, न केवल आप C ++ में अपनी लाइब्रेरी के ग्राहकों को प्रदान की जाने वाली अच्छी चीजों में से कोई भी प्रदान करने में असमर्थ होंगे, आपको C ++ से "C संगत" ( ) में अपनी लाइब्रेरी API का "अनुवाद" करने के लिए अतिरिक्त प्रयास करने होंगे extern "C"।
इसलिए यह मुद्दा बनाया जा सकता है कि पुस्तकालय को लागू करने के लिए सी बेहतर विकल्प है। व्यक्तिगत रूप से, मुझे लगता है कि C ++ के लाभ अभी भी एक extern "C"एपीआई के लिए आवश्यक प्रयास को आगे बढ़ाते हैं, लेकिन यह सिर्फ मेरे लिए है।