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

Tại sao dùng extern "C" trong code C++?

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.