सी ++ 11 मसौदा, 7.5 (पैरा 1।) से:क्या बाहरी "सी" एक अलग प्रकार का कार्य करता है?
दो अलग अलग भाषा के साथ समारोह प्रकार लिंकेज भिन्न प्रकार भले ही वे अन्यथा समान हैं कर रहे हैं। जीसीसी 4.7.1 के साथ इस नमूना कोड त्रुटि संदेश देता है
extern "C" typedef void (*c_function)(); typedef void (*cpp_function)(); void call_fun(c_function f) { } void call_fun(cpp_function f) { } extern "C" void my_c() { } void my_cpp() { } int main() { call_fun(my_c); call_fun(my_cpp); }
लेकिन,:
test.cpp: In function 'void call_fun(cpp_function)': test.cpp:7:6: error: redefinition of 'void call_fun(cpp_function)' test.cpp:4:6: error: 'void call_fun(c_function)' previously defined here
और बजना साथ ++:
तो मैं अधिभार भाषा संबंधों के आधार पर कर सकते हैं
test.cpp:7:6: error: redefinition of 'call_fun'
void call_fun(cpp_function f)
^
test.cpp:4:6: note: previous definition is here
void call_fun(c_function f)
^
अब प्रश्न:
क्या मानक सही मेरी समझ है? क्या यह कोड मान्य है?
क्या किसी को पता है कि ये कंपाइलर्स में बग हैं या यदि वे जानबूझकर अनुकूलता उद्देश्यों के लिए ऐसा कर रहे हैं?
: सी ++ 03 मानक एक ही पैराग्राफ में बिल्कुल एक ही वाक्य है, तो इस एक C++ 11 सुविधा का सवाल नहीं है जो अभी तक कंपाइलर्स द्वारा समर्थित नहीं है। – Gorpik
http://stackoverflow.com/a/10643935/1463922 देखें। सुनिश्चित करें कि सी और सी ++ मैच के कॉलिंग सम्मेलन। – PiotrNycz