Saya memiliki pustaka C ++ yang menyediakan berbagai kelas untuk mengelola data. Saya memiliki kode sumber untuk perpustakaan.
Saya ingin memperluas C ++ API untuk mendukung pemanggilan fungsi C sehingga perpustakaan dapat digunakan dengan kode C dan kode C ++ pada saat yang bersamaan.
Saya menggunakan rantai alat GNU (gcc, glibc, dll), jadi dukungan bahasa dan arsitektur tidak menjadi masalah.
Apakah ada alasan mengapa hal ini secara teknis tidak memungkinkan?
Apakah ada gotcha yang perlu saya waspadai?
Apakah ada sumber daya, kode contoh dan / atau dokumentasi yang tersedia tentang ini?
Beberapa hal lain yang saya temukan:
- Gunakan perintah berikut untuk menggabungkan header C ++ Anda yang perlu digunakan oleh kode C.
#ifdef __cplusplus
extern "C" {
#endif
//
// Code goes here ...
//
#ifdef __cplusplus
} // extern "C"
#endif
- Pertahankan antarmuka C ++ "asli" di file header terpisah yang tidak disertakan oleh C. Pikirkan prinsip PIMPL di sini. Menggunakan
#ifndef __cplusplus #error
barang membantu di sini untuk mendeteksi kegilaan. - Hati-hati dengan pengenal C ++ sebagai nama dalam kode C.
- Enum memiliki ukuran yang bervariasi antara compiler C dan C ++. Mungkin bukan masalah jika Anda menggunakan rantai alat GNU, tapi tetap berhati-hatilah.
Untuk struct, ikuti formulir berikut agar C tidak bingung.
typedef struct X { ... } X
Kemudian gunakan pointer untuk meneruskan objek C ++, mereka hanya harus dideklarasikan di C sebagai struct X di mana X adalah objek C ++.
Semua ini adalah milik seorang teman yang merupakan ahli sihir di C ++.