2013-03-17 5 views
5

क्या extern "C" पहचानकर्ता निर्दिष्ट करने के अलावा कुछ और करना उलझन में नहीं होना चाहिए?'बाहरी' सी '`के रूप में घोषित कार्यों के लिए सीमाएं? सी ++ विशेषताएं अभी भी प्रयोग योग्य हैं?

क्या सी ++ विशेषताएं उन कार्यों में उपलब्ध हैं जिन्हें extern "C" के रूप में घोषित किया गया है?

उत्तर

2

यह केवल नाम उलझन को प्रभावित करता है ताकि बाहरी दृश्यता अन्य अनुप्रयोगों के लिए स्पष्ट हो।

+0

लेकिन क्या वे अभी भी ओवरलोड हो सकते हैं? या वे सी ++ वस्तुओं को वापस कर सकते हैं? –

+1

हाँ और हाँ। बस इसे आजमाएं ... –

+0

@ एच 2CO3 - वे अधिभारित नहीं होंगे, उदा। मैं मैन्युअल रूप से ओवरलोडिंग कर रहा हूं, लेकिन सी ++ ऑब्जेक्ट्स लौटने के बारे में बिंदु लागू होता है। – dtech

0

आपको उनसे अपवाद नहीं फेंकना चाहिए, लेकिन अन्यथा आप extern "C" फ़ंक्शन के शरीर को जितनी चाहें उतनी सी ++ सुविधाओं के साथ कार्यान्वित कर सकते हैं।

यह बिल्कुल ठीक है:

MyObject myobj; 
extern "C" { 
    int myfunc(char *c) 
    { // c++ features used here 
     std::string s = myobj.method(.... 
    } 
} 
+0

मेरे द्वारा उपयोग किए जाने वाले ढांचे द्वारा किए जा रहे अपवादों के बारे में क्या - क्यूटी? – dtech

+1

अपवादों को 'बाहरी "सी" सीमा को पार नहीं करना चाहिए, क्योंकि आप यह सुनिश्चित नहीं कर सकते कि कॉलर उन्हें संभाल सकता है, या यहां तक ​​कि अगर कॉलर सी ++ में लिखा गया हो। – NovaDenizen

1

extern "C"नहीं मतलब सी कोड के रूप में संकलित है। इसका मतलब है केवल कि फ़ंक्शन को संकलित किया जाना चाहिए ताकि इसे सी कोड से बुलाया जा सके; जो वास्तव में प्रभावित करता है वह कार्यान्वयन-निर्भर है। सी ++ में आप जो कुछ भी कर सकते हैं वह ऐसे फ़ंक्शन के अंदर ठीक है, जिसमें अपवाद फेंकना शामिल है।

+0

मुझे एहसास है कि यह थोड़ा देर हो चुकी है, लेकिन टेम्पलेट्स के बारे में क्या? वे संभवतः बाहरी घोषणा के अंदर काम नहीं कर सकते हैं, क्योंकि यह नाम उलझन में रोक लगाता है? – dtech

संबंधित मुद्दे