C++ hỗ trợ nạp chồng hàm (overloading). Compiler đổi tên hàm (Name Mangling) thêm thông tin tham số để phân biệt. Mỗi compiler cách mangling khác nhau.
Ví dụ mangling
int func(int x) -> __func_i(int) double func(double x) -> __func_d(double)
C không có overloading. Khi link code C vào C++, tên hàm bị mangling → không tìm thấy định nghĩa. Giải pháp: extern "C".
Sai
int printf(const char*,...);
main() { printf("Hello"); } // Lỗi link
Đúng
extern "C" {
int printf(const char*,...);
}
main() { printf("Hello"); } // OK