Helistage C-st C++

Helistage C St C



Programmeerimisel on sageli vaja C ja C++ koostööd, tavaliselt vana koodi värskendamisel või moodulite kombineerimisel erinevates keeltes. C++ koodi kasutamine C-programmides on programmeerijatele väga kasulik, eriti vana tarkvara uuendamisel või mõlemas keeles kirjutatud osade segamisel. See juhend näitab lihtsate ja kasulike näidete abil, kuidas panna C++ funktsioonid C-ga töötama. C++ kutsumine C-programmist võib tunduda keeruline, kuid see artikkel selgitab kõike samm-sammult, nii et seda on lihtne jälgida ja alustada kahe keele koos kasutamist. See juhend on abiks teie projektide jaoks, olenemata teie programmeerimisalaste teadmiste tasemest.

Põhitõdede mõistmine

Kui tegemist on C++ funktsioonide kutsumisega C-st ja C++ objektide kasutamisest, tuleb arvestada mitmete põhielementidega:

Viidates C++ klassidele C-s

Levinud lähenemisviis C++ klassidele viitamiseks C-s hõlmab viidate kasutamist klassidele, mida saab edastada C- ja C++-koodi vahel.







Nimi Mangle

Et vältida nimemuutusi, mis võivad C-vormingus tuvastamist mõjutada, on ülioluline hoida nimed järjepidevad. See tagab, et C suudab funktsioone ja objekte õigesti tuvastada ja kasutada.



Kahe otstarbega päisefail

Päisefailil on keskne roll, täites nii C kui ka C++ jaoks kahte eesmärki. See sisaldab klasside määratlusi, mida C++ tunneb ära, ja kapseldab C tarvikufunktsioonid.



Kuidas helistada C++-le C-st

C++ funktsioonide kutsumiseks C-st on väline C-deklaratsioon ülioluline. Kui seda rakendatakse C++ funktsioonidele, tagab see, et funktsioonide nimesid käsitletakse kompileerimise ajal C-stiilis (kasutades C-linkimist). C ei tunne ära C++ funktsioone, nagu funktsioonide ülekoormus ja nimede segamine, mis võivad tekkida C++ kompileerimise ajal. Kasutades välist C-d, genereerib C++-kompilaator funktsioonide nimed, mis järgivad C-konventsioone, võimaldades sujuvat koostalitlusvõimet. See deklaratsioon pakub standardiseeritud liidest, mis võimaldab C-koodil juurdepääsu C++ funktsioonidele ja neid kasutada ilma nimetamiskonfliktide või ühilduvusprobleemideta. Järgnevalt on toodud näited C++ C-st kutsumise kohta. Selle kombinatsiooni toimimise mõistmiseks vaatame juhtumeid lähemalt.





Praktilised näited: Arvutage ringi pindala, helistades C++ kaudu

Selles lihtsas näites juhendame teid, kuidas saate arvutada ringi pindala, kutsudes C-s C++ funktsiooni. See kood koosneb päisefailist (circle.h) ja rakendusfailist (circle.cpp). Koodi esimene osa hõlmab päisefaili välist C-deklaratsiooni. Vaadake järgmist koodi. Seejärel käsitleme iga koodirida eraldi:

#ifndef CIRCLE_AREA
#define CIRCLE_AREA

väline 'C' {

kahekordne arvuta_CApindala ( kahekordne rad ) ;

}

#endif

kahekordne Circle_CARea ( kahekordne rad ) {

tagasi 3,14159 * rad * rad ;

}

Jaotame iga osa:



#ifndef CIRCLE_AREA ja #define CIRCLE_AREA

Need read on osa kaasamiskaitsetest, mis tagab, et päisefaili sisu kaasatakse kompileerimisprotsessi ainult üks kord. Kui CIRCLE_AREA pole määratletud, lisatakse järgmine kood ja CIRCLE_AREA määratletakse.

väline 'C'

Seda süntaksit kasutatakse deklareerimiseks, et järgmisel funktsioonil on C-lülitus. See on oluline koodi kirjutamisel, mida kutsutakse nii C-st kui ka C++-st.

kahekordne arvuta_CApindala ( kahekordne rad ) ;

See rida deklareerib funktsiooni nimega 'calculate_Carea', mis võtab kahekordse argumendi (rad) ja tagastab kahekordse argumendi.

Päisefailis olev väline C-deklaratsioon teavitab kompilaatorit kasutama funktsiooni jaoks C-stiilis linki, muutes selle C-koodist välja kutsutavaks. Kasutage seda koodi ringi pindala leidmiseks, salvestades selle faili 'circle.h'. Kui olete selle päisefaili salvestanud, peate lisama selle päisefailina C++ programmi ja täitma soovitud funktsiooni. Järgmine on C-kood, mis arvutab ringi pindala. Fail 'main.c' sisaldab C++ päist ja kutsub otse faili 'Circle_Carea'. Vaadake järgmist koodi:

#include 'ring.h'

int peamine ( ) {

kahekordne rads = 5.0 ;

kahekordne ala = Circle_CARea ( rads ) ;

printf ( 'Ringi pindala on:  %.2f \n ' , ala ) ;

tagasi 0 ;

}

See lihtne C-programm arvutab ja prindib ringi pindala, kasutades funktsiooni, mis on määratletud eelmises failis nimega 'circle.h'. Jagame koodi lahti:

#include 'ring.h'

See rida sisaldab programmi päisefaili 'circle.h' sisu. Päisefail sisaldab tõenäoliselt funktsioonide deklaratsioone või makrosid, mis on seotud ringiarvutustega.

int peamine ( ) {

Programmi täitmine algab põhifunktsiooniga, C-programmide sisenemispunktiga.

kahekordne rads = 5.0 ;

Kahekordse tüüpi muutuja rads deklareeritakse ja omistatakse väärtusega 5,0. See muutuja esindab tõenäoliselt ringi raadiust.

kahekordne ala = Circle_CARea ( rads ) ;

Funktsiooni nimega 'Circle_Carea' kutsutakse argumendina raadiusega rad ja tulemus salvestatakse muutuva alale.

printf ( 'Ringi pindala on %.2f \n ' , ala ) ;

Tulemus prinditakse konsooli kasutades “printf”. String 'Ringi pindala on: %.2f\n' on vormingustring, mille pindala väärtuse kohahoidja on '%f'. '.2' jaotises '%.2f' määrab, et kuvatakse ainult kaks kohta pärast koma.

tagasi 0 ;

Põhifunktsioon lõpetab 0 tagastamisega, mis näitab programmi edukat täitmist operatsioonisüsteemis.

Kokkuvõttes deklareerib päisefail funktsiooni C-lingiga ja rakendusfail määratleb ringi pindala arvutamise loogika. See eraldamine võimaldab koodi kasutada nii C- kui ka C++ programmides. Vaadake järgmisel pildil toodud koodi väljundit:

Nagu näete väljundis, on ringi arvutatud pindala 78,54, mis on pindala = 3,14 * 5 * 5 = 78,54 arvutamine. Pindala arvutamise funktsioon on määratletud päisefailis 'circle.h', mida seejärel kutsutakse C++-failis välise 'C' abil.

Järeldus

Selles juhendis juhendasime teid C++ C-programmidesse integreerimisel. C++ funktsionaalsuse integreerimine C-koodibaasidesse nõuab osutajate, nimede segamise ja kaheotstarbeliste päisefailide hoolikat kaalumist. Esitatud näited illustreerivad praktilist lähenemist selle integratsiooni saavutamiseks. Nüüd, kui olete näinud, kuidas need kaks programmeerimiskeelt ühendada, on teil rohkem tööriistu. C++ võimsuse vabastamine C-ga töötamise ajal võib anda teie projektidele täiesti uue funktsionaalsuse taseme.