Dùng extern "C" trong C++ khi khai báo hàm được triển khai/biên dịch bằng C.
extern "C" báo cho compiler C++ dùng quy ước đặt tên (name mangling) và gọi hàm (calling convention) của C. C++ mang tên hàm (thêm thông tin tham số vào tên symbol) để hỗ trợ overloading, trong khi C không. Nếu không dùng extern "C", linker không tìm thấy symbol C từ code C++.
Ví dụ
// file_c.h (header C)
#ifdef __cplusplus
extern "C" {
#endif
void ham_c(void);
#ifdef __cplusplus
}
#endif
// file_c.c
#include "file_c.h"
#include <stdio.h>
void ham_c(void) { printf("Ham C\n"); }
// file_cpp.cpp
#include "file_c.h"
int main() { ham_c(); return 0; }
Biên dịch: gcc -c file_c.c, g++ file_cpp.cpp file_c.o -o app.
Tóm lại: extern "C" tắt name mangling cho hàm C, cho phép C++ gọi thư viện C.