Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Name Mangling và extern "C" trong C++

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