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".