Panggil C++ daripada C

Panggil C Daripada C



Dalam pengaturcaraan, selalunya terdapat keperluan untuk C dan C++ untuk bekerjasama, biasanya apabila mengemas kini kod lama atau menggabungkan modul dalam pelbagai bahasa. Menggunakan kod C++ dalam program C sangat membantu pengaturcara, terutamanya apabila mengemas kini perisian lama atau mencampurkan bahagian yang ditulis dalam kedua-dua bahasa. Panduan ini akan menunjukkan kepada anda cara membuat fungsi C++ berfungsi dengan C dengan contoh yang mudah dan berguna. Memanggil C++ daripada program C mungkin kelihatan rumit, tetapi artikel ini menerangkan segala-galanya langkah demi langkah, jadi mudah untuk diikuti dan mula menggunakan kedua-dua bahasa itu bersama-sama. Panduan ini berguna untuk projek anda tanpa mengira tahap pengetahuan pengaturcaraan anda.

Memahami Asas

Apabila ia datang untuk menggunakan fungsi C++ daripada C dan menggunakan objek C++, beberapa elemen utama perlu dipertimbangkan:

Merujuk Kelas C++ dalam C

Pendekatan biasa untuk merujuk kelas C++ dalam C melibatkan penggunaan penunjuk kepada kelas yang boleh dihantar antara kod C dan C++.







Nama Mangle

Untuk mengelakkan perubahan nama yang boleh menjejaskan pengiktirafan dalam C, adalah penting untuk mengekalkan nama yang konsisten. Ini memastikan bahawa C boleh mengenal pasti dan menggunakan fungsi dan objek dengan betul.



Fail Pengepala untuk Dwi Tujuan

Fail pengepala memainkan peranan penting, berfungsi untuk dua tujuan untuk C dan C++. Ia termasuk definisi kelas yang boleh dikenali oleh C++ dan merangkum fungsi pengakses untuk C.



Bagaimana untuk Memanggil C++ daripada C

Untuk memanggil fungsi C++ daripada C, pengisytiharan 'C' luaran adalah penting. Apabila digunakan pada fungsi C++, ia memastikan bahawa nama fungsi dirawat dalam gaya C (menggunakan C-linkage) semasa proses penyusunan. C tidak mengiktiraf ciri-ciri C++ seperti fungsi lebihan beban dan nama yang merosakkan yang boleh berlaku semasa kompilasi C++. Menggunakan 'C' luaran, pengkompil C++ menjana nama fungsi yang mematuhi konvensyen C, membolehkan kesalingoperasian yang lancar. Pengisytiharan ini menyediakan antara muka piawai, membolehkan kod C mengakses dan menggunakan fungsi C++ tanpa menghadapi konflik penamaan atau isu keserasian. Berikut ialah contoh memanggil C++ daripada C. Untuk memahami cara gabungan ini berfungsi, mari kita lihat dengan lebih teliti pada kejadian.





Contoh Praktikal: Kira Luas Bulatan dengan Memanggil C++ daripada C

Dalam contoh mudah ini, kami akan membimbing anda tentang cara anda boleh mengira luas bulatan dengan memanggil fungsi C++ dalam C. Kod ini terdiri daripada fail pengepala (circle.h) dan fail pelaksanaan (circle.cpp). Bahagian pertama kod melibatkan pengisytiharan C luaran dalam fail pengepala. Lihat kod berikut. Kemudian, mari kita huraikan setiap baris kod secara individu:

#ifndef CIRCLE_AREA
#define CIRCLE_AREA

luaran 'C' {

berganda mengira_CArea ( berganda rad ) ;

}

#endif

berganda Bulatan_CArea ( berganda rad ) {

kembali 3.14159 * rad * rad ;

}

Mari pecahkan setiap bahagian:



#ifndef CIRCLE_AREA dan #define CIRCLE_AREA

Baris ini adalah sebahagian daripada pengawal termasuk yang memastikan bahawa kandungan fail pengepala dimasukkan sekali sahaja dalam proses penyusunan. Jika CIRCLE_AREA tidak ditakrifkan, kod seterusnya akan disertakan dan CIRCLE_AREA akan ditakrifkan.

luaran 'C'

Sintaks ini digunakan untuk mengisytiharkan bahawa fungsi berikut mempunyai kaitan C. Ini penting semasa menulis kod yang akan dipanggil dari kedua-dua C dan C++.

berganda mengira_CArea ( berganda rad ) ;

Baris ini mengisytiharkan fungsi bernama 'calculate_Carea' yang mengambil argumen berganda (rad) dan mengembalikan dua kali ganda.

Pengisytiharan 'C' luaran dalam fail pengepala memberitahu pengkompil untuk menggunakan pautan gaya C untuk fungsi tersebut, menjadikannya boleh dipanggil daripada kod C. Gunakan kod ini untuk mencari kawasan bulatan dengan menyimpannya dalam fail 'circle.h'. Sebaik sahaja anda menyimpan fail pengepala ini, semua yang anda perlu lakukan ialah memasukkan ini sebagai fail pengepala dalam program C++ dan melaksanakan fungsi yang diingini. Berikut ialah kod C yang mengira luas bulatan. Fail 'main.c' termasuk pengepala C++ dan memanggil 'Circle_Carea' secara langsung. Lihat kod berikut:

#include 'circle.h'

int utama ( ) {

berganda rads = 5.0 ;

berganda kawasan = Bulatan_CArea ( rads ) ;

printf ( 'Kawasan  bulatan ialah:  %.2f \n ' , kawasan ) ;

kembali 0 ;

}

Program C mudah ini mengira dan mencetak kawasan bulatan menggunakan fungsi yang ditakrifkan dalam fail sebelumnya bernama 'circle.h'. Mari pecahkan kod:

#include 'circle.h'

Baris ini termasuk kandungan fail pengepala 'circle.h' dalam program. Fail pengepala mungkin mengandungi pengisytiharan fungsi atau makro yang berkaitan dengan pengiraan bulatan.

int utama ( ) {

Pelaksanaan program bermula dengan fungsi utama, titik masuk untuk program C.

berganda rads = 5.0 ;

Rad pembolehubah jenis berganda diisytiharkan dan diberikan dengan nilai 5.0. Pembolehubah ini berkemungkinan mewakili jejari bulatan.

berganda kawasan = Bulatan_CArea ( rads ) ;

Fungsi bernama 'Circle_Carea' dipanggil dengan rad jejari sebagai hujah dan hasilnya disimpan dalam kawasan pembolehubah.

printf ( “Luas bulatan ialah: %.2f \n ' , kawasan ) ;

Hasilnya dicetak ke konsol menggunakan 'printf'. Rentetan 'Kawasan bulatan ialah: %.2f\n' ialah rentetan format dengan pemegang tempat '%f' untuk nilai kawasan. “.2” dalam “%.2f” menyatakan bahawa hanya dua tempat perpuluhan harus dipaparkan.

kembali 0 ;

Fungsi utama diakhiri dengan mengembalikan 0 yang menunjukkan pelaksanaan program yang berjaya ke sistem pengendalian.

Ringkasnya, fail pengepala mengisytiharkan fungsi dengan pautan C, dan fail pelaksanaan mentakrifkan logik untuk mengira kawasan bulatan. Pemisahan ini membolehkan kod digunakan dalam kedua-dua program C dan C++. Rujuk kepada output kod yang diberikan dalam imej berikut:

Seperti yang anda lihat dalam output, luas bulatan yang dikira ialah 78.54 iaitu pengiraan luas = 3.14*5*5 = 78.54. Fungsi untuk mengira kawasan ditakrifkan dalam fail pengepala 'circle.h' yang kemudiannya dipanggil dalam fail C++ dengan bantuan 'C' luaran.

Kesimpulan

Kami membimbing anda melalui proses penyepaduan C++ ke dalam program C anda dalam panduan ini. Mengintegrasikan kefungsian C++ ke dalam pangkalan kod C memerlukan pertimbangan berhati-hati terhadap penuding, pemisahan nama dan fail pengepala dwiguna. Contoh yang disediakan menggambarkan pendekatan praktikal untuk mencapai penyepaduan ini. Memandangkan anda telah melihat cara menyambungkan kedua-dua bahasa pengaturcaraan ini, anda mempunyai lebih banyak alatan. Membuka kunci kuasa C++ semasa bekerja dengan C boleh memberikan projek anda tahap kefungsian yang baharu.