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

Hiệu ứng của extern \"C\" trong C++


extern "C" yêu cầu compiler dùng C linkage cho hàm/biến trong khối: không name mangling, tên symbol giữ nguyên.

Vấn đề Name Mangling

C++ overload hàm → compiler đổi tên nội bộ (mangling) để phân biệt. C không overload → không mangling. Link C++ với thư viện C cần tắt mangling.

Ví dụ

// Sai: linker tìm symbol mangled
int printf(const char*, ...);
int main() { printf("Hello"); }

// Đúng: extern "C" tắt mangling
extern "C" { int printf(const char*, ...); }
int main() { printf("Hello"); } // OK

Lưu ý: Chỉ dùng ở namespace scope. Member function không được đặt trong extern "C".