從C++ 11草案,7.5(第1段):外部「C」函數是一個單獨的類型嗎?
兩種功能類型的具有不同語言 鍵是不同的類型,即使它們是其它方面相同。
因此,我可以根據語言的聯繫做超負荷:
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);
}
但是,與GCC 4.7.1此示例代碼提供了錯誤信息:
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)
^
現在的問題:
是我的標準的理解是否正確?這段代碼是否有效?
是否有人知道這些都是在編譯器或者錯誤,他們故意做這樣爲了兼容?
只是爲了記錄:在C++ 03標準具有完全相同的同款同一句話,所以這不是編譯器尚未支持C++ 11功能的問題。 – Gorpik
請參閱http://stackoverflow.com/a/10643935/1463922。確保調用C和C++的約定匹配。 – PiotrNycz