ISO C 標準不支持函數重載。 同名函數多次定義直接導致編譯錯誤:error C2733: second C linkage of overloaded function not allowed。
C++ 編譯器對函數名實施 Name Mangling(名字修飾),將 func(int)、func(float) 編譯為不同的內部符號(如 _Z4funci、_Z4funcf),鏈接階段自然不衝突。
extern "C" {
void MyTestFun(int n); // 符號名:MyTestFun
void MyTestFun(char *str); // 符號名:MyTestFun → 衝突!
}
extern "C" 告訴編譯器禁用 Name Mangling,按 C 規則導出符號。因此同名函數在 extern "C" 塊內依然衝突。
main 之所以能有多種簽名(int main()、int main(int, char**) 等),是因為運行時啟動代碼(__tmainCRTStartup)根據編譯器內部邏輯選擇調用哪個版本,而非語言級重載機制。
#ifdef __cplusplus extern "C" { #endif 包裹extern "C" 封裝層(C 接口)