क्या सी से बूस्ट.डेटटाइम लाइब्रेरी का उपयोग करना संभव है, और यदि ऐसा है तो क्या कोई उदाहरण उपलब्ध है (अधिमानतः जीसीसी-टाइप टूल्स का उपयोग करके निर्माण प्रक्रिया को कवर करना)? मैंने सामान्य रूप से बूस्ट दस्तावेज़ और इंटरनेट की खोज की है, और यह सैद्धांतिक रूप से संभव लगता है, लेकिन किसी भी तरह से कोई स्पष्ट उत्तर नहीं मिला है।

0
mwag 8 जून 2018, 18:34

2 जवाब

सबसे बढ़िया उत्तर

नहीं, बूस्ट एक C++ लाइब्रेरी है और Boost.DateTime कोई अपवाद नहीं है। यदि आप किसी भी डेटटाइम शीर्षलेख को देखते हैं तो आप कक्षाओं से लेकर टेम्पलेट्स से नामस्थानों तक और बहुत कुछ सी ++ सुविधाओं को देखेंगे - इनमें से कोई भी सी में समर्थित नहीं है।

हालांकि, आप सी ++ में एक रैपर लाइब्रेरी बना सकते हैं जो आपको शुद्ध सी फ़ंक्शंस के रूप में आवश्यक कार्यक्षमता का खुलासा करता है, फिर उन्हें सी से कॉल करें।

1
TypeIA 8 जून 2018, 18:38

सी और सी ++ अत्यधिक इंटरऑपरेबल हैं; सी ++ से सी कोड को कॉल करना छोटा है; सी से सी ++ कोड को कॉल करना अधिक प्रतिबंधित है क्योंकि इंटरफ़ेस में सी लिंकेज होना चाहिए और इसमें केवल सी में उपलब्ध प्रकार होना चाहिए और उदाहरण के लिए डिफ़ॉल्ट तर्क या फ़ंक्शन ओवरलोडिंग जैसी सी ++ विशिष्ट सुविधाओं का उपयोग नहीं कर सकता है।

C में C++ कोड का उपयोग करने के लिए यह आवश्यक है कि इंटरफ़ेस में एक extern "C" लिंकेज विनिर्देश हो, जो स्वयं मान्य C नहीं है, इसलिए किसी भी हेडर फ़ाइल में विनिर्देश सशर्त होना चाहिए जैसे:

// interop.h
#if !defined INTEROP_H
#define INTEROP_H

#if defined __cplusplus
extern "C"
{
#endif

// C interface here
void somefunction() ;

#if defined __cplusplus
}
#endif

#endif // INTEROP_H

तब इंटरफ़ेस का कार्यान्वयन स्वयं C++ कोड होगा:

// interop.cpp
#include "interop.h"

void somefunction()
{
    // C++ code here callable from C through somefunction()
}

लेकिन इंटरफ़ेस सी कोड से कॉल करने योग्य है:

// notcpp.c
#include "interop.h"
int main()
{
    somefunction() ;
}

यह दृष्टिकोण ठीक है जहां इंटरफ़ेस सरल है, उदाहरण के लिए यदि आप कुछ विशिष्ट प्रक्रिया के लिए बूस्ट डेट/टाइम लाइब्रेरी का उपयोग करते हैं जिसके परिणाम सी में प्रदर्शित किए जा सकते हैं, तो यह उपयुक्त हो सकता है यदि अकेले सी में समकक्ष कार्यक्षमता लागू करना होगा निषेधात्मक हो। लेकिन संपूर्ण सी ++ कक्षाओं के लिए सी रैपर बनाना समय लेने वाली त्रुटि प्रवण, लचीला और अंततः व्यर्थ है - आपके सी कोड को सी ++ के रूप में संकलित करना आम तौर पर आसान होगा, फिर इंटरऑपरेबिलिटी बाधा गायब हो जाती है क्योंकि आप सी ++ विशिष्ट कोड को सीधे अपने मौजूदा कोडबेस में पेश कर सकते हैं (हालांकि इसके बाद इसे सी के रूप में संकलित नहीं किया जा सकता है)। सी ++ बहु-प्रतिमान है और इसमें सी लाइब्रेरी को अपनी सी ++ लाइब्रेरी में शामिल किया गया है, और अधिकांश तृतीय-पक्ष और ओएस सी लाइब्रेरी हेडर में पहले से ही सी ++ सशर्त सी लिंकेज रैपर शामिल है, इसलिए आपको ओओपी शैली में अपने सभी कोड को फिर से लिखने की आवश्यकता नहीं है यदि आप केवल बड़े पुस्तकालय पारिस्थितिकी तंत्र का लाभ उठाना चाहते हैं तो C++ का उपयोग करें।

2
Clifford 8 जून 2018, 19:39