Pokličite C++ iz C

Poklicite C Iz C



Pri programiranju pogosto obstaja potreba, da C in C++ delujeta skupaj, običajno pri posodabljanju stare kode ali kombiniranju modulov v različnih jezikih. Uporaba kode C++ v programih C je zelo koristna za programerje, zlasti pri posodabljanju stare programske opreme ali mešanju delov, ki so napisani v obeh jezikih. Ta vodnik vam bo s preprostimi in uporabnimi primeri pokazal, kako omogočiti, da funkcije C++ delujejo s C-jem. Klicanje C++ iz programa C se morda zdi težavno, vendar ta članek razlaga vse korak za korakom, tako da je enostavno slediti in začeti uporabljati oba jezika skupaj. Ta priročnik je koristen za vaše projekte ne glede na vašo raven znanja programiranja.

Razumevanje osnov

Ko gre za priklic funkcij C++ iz C in uporabo objektov C++, je treba upoštevati več ključnih elementov:

Sklicevanje na razrede C++ v C

Pogost pristop k sklicevanju na razrede C++ v C vključuje uporabo kazalcev na razrede, ki se lahko posredujejo med kodo C in C++.







Ime Mangle

Da bi preprečili spremembe imen, ki lahko vplivajo na prepoznavanje v C, je ključnega pomena, da so imena dosledna. To zagotavlja, da lahko C pravilno prepozna in uporabi funkcije in objekte.



Datoteka glave za dvojni namen

Datoteka z glavo ima ključno vlogo in ima dvojni namen za C in C++. Vključuje definicije razredov, ki jih prepozna C++, in zajema funkcije dostopa za C.



Kako poklicati C++ iz C

Za klic funkcij C++ iz C je deklaracija extern »C« ključna. Ko se uporablja za funkcije C++, zagotavlja, da se imena funkcij med postopkom prevajanja obravnavajo v slogu C (z uporabo C-povezave). C ne prepozna funkcij C++, kot sta preobremenitev funkcij in spreminjanje imen, do katerih lahko pride med prevajanjem C++. Z uporabo zunanjega »C« prevajalnik C++ ustvari imena funkcij, ki se držijo konvencij C, kar omogoča brezhibno interoperabilnost. Ta deklaracija zagotavlja standardiziran vmesnik, ki kodi C omogoča dostop do funkcij C++ in njihovo uporabo, ne da bi pri tem naletela na spore pri poimenovanju ali težave z združljivostjo. Sledijo primeri klicanja C++ iz C. Da bi razumeli, kako deluje ta kombinacija, si poglejmo primere podrobneje.





Praktični primeri: Izračunajte ploščino kroga s klicem C++ iz C

V tem preprostem primeru vas bomo vodili, kako lahko izračunate površino kroga s klicem funkcije C++ v C. Ta koda je sestavljena iz datoteke glave (circle.h) in izvedbene datoteke (circle.cpp). Prvi del kode vključuje deklaracijo extern C v datoteki glave. Oglejte si naslednjo kodo. Nato podrobneje razložimo vsako vrstico kode posebej:

#ifndef CIRCLE_AREA
#define CIRCLE_AREA

ekstern 'C' {

dvojno izračunaj_CApovršino ( dvojno rad ) ;

}

#endif

dvojno Circle_CAarea ( dvojno rad ) {

vrnitev 3,14159 * rad * rad ;

}

Razčlenimo vsak del:



#ifndef CIRCLE_AREA in #define CIRCLE_AREA

Te vrstice so del varoval za vključitev, ki zagotavljajo, da je vsebina datoteke glave v procesu prevajanja vključena samo enkrat. Če CIRCLE_AREA ni definiran, bo naslednja koda vključena in CIRCLE_AREA bo definiran.

ekstern 'C'

Ta sintaksa se uporablja za razglasitev, da ima naslednja funkcija povezavo C. To je bistveno pri pisanju kode, ki bo klicana iz C in C++.

dvojno izračunaj_CApovršino ( dvojno rad ) ;

Ta vrstica deklarira funkcijo z imenom 'calculate_Carea', ki sprejme dvojni argument (rad) in vrne dvojni argument.

Extern »C« deklaracija v datoteki glave obvesti prevajalnik, naj za funkcijo uporabi povezavo v slogu C, zaradi česar jo je mogoče priklicati iz kode C. S to kodo poiščite območje kroga tako, da ga shranite v datoteko »circle.h«. Ko shranite to datoteko glave, jo morate samo vključiti kot datoteko glave v program C++ in izvesti želeno funkcijo. Sledi koda C, ki izračuna ploščino kroga. Datoteka »main.c« vključuje glavo C++ in neposredno kliče »Circle_Carea«. Oglejte si naslednjo kodo:

#include 'circle.h'

int glavni ( ) {

dvojno rads = 5.0 ;

dvojno območje = Circle_CAarea ( rads ) ;

printf ( 'Površina kroga je:  %.2f \n ' , območje ) ;

vrnitev 0 ;

}

Ta preprost program C izračuna in natisne površino kroga z uporabo funkcije, ki je definirana v prejšnji datoteki z imenom 'circle.h'. Razčlenimo kodo:

#include 'circle.h'

Ta vrstica vključuje vsebino datoteke glave »circle.h« v programu. Datoteka glave verjetno vsebuje deklaracije funkcij ali makre, ki so povezani z izračuni kroga.

int glavni ( ) {

Izvajanje programa se začne z glavno funkcijo, vstopno točko za programe C.

dvojno rads = 5.0 ;

Spremenljivka rads tipa double je deklarirana in dodeljena z vrednostjo 5,0. Ta spremenljivka verjetno predstavlja polmer kroga.

dvojno območje = Circle_CAarea ( rads ) ;

Funkcija z imenom 'Circle_Carea' se pokliče s polmerom rads kot argumentom in rezultat se shrani v območje spremenljivk.

printf ( 'Površina kroga je: %.2f \n ' , območje ) ;

Rezultat se natisne na konzolo z uporabo »printf«. Niz »Območje kroga je: %.2f\n« je formatni niz z ogrado »%f« za vrednost območja. ».2« v »%.2f« določa, da morata biti prikazani samo dve decimalni mesti.

vrnitev 0 ;

Glavna funkcija se zaključi z vrnitvijo 0, ki operacijskemu sistemu označuje uspešno izvedbo programa.

Če povzamemo, glava datoteke deklarira funkcijo s povezavo C, implementacijska datoteka pa definira logiko za izračun površine kroga. Ta ločitev omogoča uporabo kode v programih C in C++. Glejte izhod kode, ki je podan na naslednji sliki:

Kot lahko vidite v izhodu, je izračunana površina kroga 78,54, kar je izračun ploščine = 3,14*5*5 = 78,54. Funkcija za izračun površine je definirana v datoteki glave »circle.h«, ki se nato pokliče v datoteki C++ s pomočjo extern »C«.

Zaključek

V tem priročniku smo vas vodili skozi postopek integracije C++ v vaše programe C. Vključevanje funkcionalnosti C++ v kodne baze C zahteva skrbno upoštevanje kazalcev, spreminjanja imen in dvonamenskih datotek glave. Predloženi primeri ponazarjajo praktičen pristop k doseganju te integracije. Zdaj, ko ste videli, kako povezati ta dva programska jezika, imate več orodij. Odklepanje moči C++ med delom s C bi lahko vašim projektom dalo povsem novo raven funkcionalnosti.