2009-04-04 19 views
13

मुझे अभी कुछ सी कोड मिला है जो बाहरी कार्यों को घोषित करने के लिए बाहरी "सी" का उपयोग करता है:बाहरी "सी" का सी में कोई प्रभाव पड़ता है?

extern "C" void func(); 

क्या यह वैध सी है? मुझे इस लाइन में एक त्रुटि मिल रही है, लेकिन मुझे यकीन नहीं है कि यह इस वजह से है या कुछ और है।

उत्तर

29

नहीं, यह मान्य नहीं है सी। इसे सी कोड में परिभाषित कार्यों के संदर्भ में केवल C++ कोड में उपयोग किया जाना चाहिए। extern "C" एक ifdef __cplusplus/#endif ब्लॉक में घिरा किया जाना चाहिए:

// For one function 
#ifdef __cplusplus 
extern "C" 
#endif 
void func(); 

// For more than one function 
#ifdef __cplusplus 
extern "C" 
{ 
#endif 

void func1(); 
void func2(); 

#ifdef __cplusplus 
} 
#endif 
11

इस एक सी ++ अंकन सी बुला मानकों का उपयोग करने के संकलक/लिंकर बताने के लिए है।

आमतौर पर उस पंक्ति को प्री-प्रोसेसर कथन में लपेटा जाता है।

#ifdef __cplusplus 
extern "C" { 
#endif 

// stuff 

#ifdef __cplusplus 
} 
#endif 
2

सी में मान्य नहीं है। यदि प्रीप्रोकैसिंग के बाद मौजूद है तो मानक के अनुसार नैदानिक ​​परिणाम होगा।

सी ++ के लिए, यह नाम-उलझन का मोड़ है। अधिक जानकारी के लिए this देखें कि इसकी आवश्यकता क्यों हो सकती है। क्या आप कुछ और विवरण पोस्ट कर सकते हैं?

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

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