Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memanggil Fungsi C daripada Kod C dan Mengelakkan Isu Perpecahan Nama?
Memanggil Fungsi C dari C: Menavigasi Nama Mangling
Apabila bekerja dengan aplikasi bahasa campuran, cabaran untuk memanggil fungsi C dari dalam C timbul kerana nama C 'mangling. Tidak seperti C, yang menggunakan nama fungsi mudah, C menggunakan skema penamaan yang kompleks untuk menyelesaikan fungsi dan kelas yang terlebih beban, menghasilkan tandatangan fungsi yang berbeza. Ini boleh membawa kepada ralat pemaut apabila cuba menyelesaikan simbol yang tidak dapat diselesaikan.
Dalam kes sedemikian, penyelesaian melibatkan penciptaan API C yang menyediakan akses kepada fungsi C. Ini memerlukan penulisan kod C yang diisytiharkan sebagai "C" luaran dan mematuhi sintaks C tulen, mengelakkan ciri berorientasikan objek seperti kelas. Selepas itu, pustaka pembalut C dicipta untuk mendedahkan kefungsian pustaka C.
Sebagai contoh, pertimbangkan API C berikut:
#ifdef __cplusplus #define EXTERNC extern "C" #else #define EXTERNC #endif typedef void* mylibrary_mytype_t; EXTERNC mylibrary_mytype_t mylibrary_mytype_init(); EXTERNC void mylibrary_mytype_destroy(mylibrary_mytype_t mytype); EXTERNC void mylibrary_mytype_doit(mylibrary_mytype_t self, int param); #undef EXTERNC
Pelaksanaan C yang sepadan adalah seperti berikut:
mylibrary_mytype_t mylibrary_mytype_init() { return new MyType; } void mylibrary_mytype_destroy(mylibrary_mytype_t untyped_ptr) { MyType* typed_ptr = static_cast<MyType*>(untyped_ptr); delete typed_ptr; } void mylibrary_mytype_doit(mylibrary_mytype_t untyped_self, int param) { MyType* typed_self = static_cast<MyType*>(untyped_self); typed_self->doIt(param); }
Pendekatan ini membolehkan anda mengakses kefungsian C daripada kod C sambil mengurangkan isu gangguan nama.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memanggil Fungsi C daripada Kod C dan Mengelakkan Isu Perpecahan Nama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!