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"
एपीआई के लिए आवश्यक प्रयास को आगे बढ़ाते हैं, लेकिन यह सिर्फ मेरे लिए है।