Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ผลของ extern "C" ใน C++

extern "C" ระบุ linkage แบบ C ป้องกัน name mangling ของ C++ ชื่อฟังก์ชันจะคงเดิมใน object file

ปัญหา Name Mangling

C++ รองรับ overloading → compiler เข้ารหัสชื่อฟังก์ชัน (mangle) รวม parameter types เช่น func(int) → _Z4funci ต่างคอมไพเลอร์ต่างเข้ารหัส

การใช้ extern "C"

// เรียก C library จาก C++
extern "C" {
    #include  // หรือ header C อื่นๆ
    // หรือประกาศเอง
    int printf(const char*, ...);
}

int main() {
    printf("Hello from C!\n"); // ไม่มี name mangling
}

กรณีใช้งานทั่วไป

  • เรียก C libraries จาก C++ code
  • เขียน C++ functions ให้ C code เรียก (callback, plugins)
  • Header files ที่ share ระหว่าง C และ C++

Header แบบ Cross-language

// mylib.h
#ifdef __cplusplus
extern "C" {
#endif

void my_c_function(int);

#ifdef __cplusplus
}
#endif

หมายเหตุ: extern "C" ใช้ได้เฉพาะ namespace scope ไม่ได้ใช้กับ class members