Pozovite C++ iz C-a

Pozovite C Iz C A



U programiranju često postoji potreba da C i C++ rade zajedno, obično kada se ažurira stari kod ili kombiniraju moduli na različitim jezicima. Korištenje C++ koda u C programima vrlo je korisno za programere, posebno kada ažuriraju stari softver ili miješaju dijelove koji su napisani na oba jezika. Ovaj će vam vodič pokazati kako C++ funkcije raditi s C-om uz jednostavne i korisne primjere. Pozivanje na C++ iz C programa moglo bi se činiti lukavim, ali ovaj članak objašnjava sve korak po korak, tako da je lako pratiti i početi koristiti dva jezika zajedno. Ovaj vodič je od pomoći za vaše projekte bez obzira na vašu razinu znanja programiranja.

Razumijevanje osnova

Kada se radi o pozivanju C++ funkcija iz C-a i korištenju C++ objekata, potrebno je razmotriti nekoliko ključnih elemenata:

Referenciranje C++ klasa u C-u

Uobičajeni pristup referenciranju C++ klasa u C-u uključuje korištenje pokazivača na klase koji se mogu proslijediti između C i C++ koda.







Ime Mangle

Kako biste spriječili promjene imena koje mogu utjecati na prepoznavanje u C-u, ključno je da imena budu dosljedna. Ovo osigurava da C može ispravno identificirati i koristiti funkcije i objekte.



Datoteka zaglavlja za dvostruku namjenu

Datoteka zaglavlja ima ključnu ulogu, služeći dvostrukoj svrsi i za C i za C++. Uključuje definicije klasa koje su prepoznatljive u C++ i enkapsulira pristupne funkcije za C.



Kako pozvati C++ iz C-a

Za pozivanje C++ funkcija iz C-a ključna je extern “C” deklaracija. Kada se primijeni na C++ funkcije, osigurava da se nazivi funkcija tretiraju u C stilu (koristeći C-linkage) tijekom procesa kompilacije. C ne prepoznaje C++ značajke kao što su preopterećenje funkcija i krivotvorenje naziva do kojih može doći tijekom C++ kompilacije. Koristeći extern “C”, C++ prevodilac generira nazive funkcija koji se pridržavaju C konvencija, omogućujući besprijekornu interoperabilnost. Ova deklaracija pruža standardizirano sučelje, omogućujući C kodu pristup i korištenje C++ funkcija bez susretanja sa sukobima naziva ili problemima kompatibilnosti. Slijede primjeri pozivanja C++ iz C-a. Da bismo razumjeli kako ova kombinacija funkcionira, pogledajmo pobliže instance.





Praktični primjeri: Izračunajte površinu kruga pozivanjem C++ iz C-a

U ovom jednostavnom primjeru uputit ćemo vas kako možete izračunati površinu kruga pozivanjem C++ funkcije u C-u. Ovaj se kod sastoji od datoteke zaglavlja (circle.h) i implementacijske datoteke (circle.cpp). Prvi dio koda uključuje extern C deklaraciju u datoteci zaglavlja. Pogledajte sljedeći kod. Zatim, razradimo svaku liniju koda pojedinačno:

#ifndef PODRUČJE_KRUGA
#definiraj CIRCLE_AREA

vanjski 'C' {

dvostruko izračunaj_CApovršinu ( dvostruko rad ) ;

}

#završi ako

dvostruko Područje_kruga ( dvostruko rad ) {

povratak 3.14159 * rad * rad ;

}

Razdvojimo svaki dio:



#ifndef CIRCLE_AREA i #define CIRCLE_AREA

Ovi redovi su dio uključenih čuvara koji osiguravaju da je sadržaj datoteke zaglavlja uključen samo jednom u procesu kompilacije. Ako CIRCLE_AREA nije definiran, sljedeći kod će biti uključen i CIRCLE_AREA će biti definiran.

vanjski 'C'

Ova se sintaksa koristi za deklaraciju da sljedeća funkcija ima C vezu. Ovo je bitno kada pišete kod koji će se pozivati ​​i iz C i iz C++.

dvostruko izračunaj_CApovršinu ( dvostruko rad ) ;

Ovaj redak deklarira funkciju pod nazivom 'calculate_Carea' koja uzima dvostruki argument (rad) i vraća dvostruki argument.

Extern “C” deklaracija u datoteci zaglavlja obavještava kompajler da koristi vezu u stilu C za funkciju, čineći je pozivnom iz C koda. Upotrijebite ovaj kod da biste pronašli površinu kruga tako da ga spremite u datoteku 'circle.h'. Nakon što spremite ovu datoteku zaglavlja, sve što trebate učiniti je uključiti je kao datoteku zaglavlja u C++ program i izvesti željenu funkciju. Slijedi C kod koji izračunava površinu kruga. Datoteka 'main.c' uključuje C++ zaglavlje i izravno poziva 'Circle_Carea'. Pogledajte sljedeći kôd:

#uključi 'krug.h'

int glavni ( ) {

dvostruko rads = 5.0 ;

dvostruko područje = Područje_kruga ( rads ) ;

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

povratak 0 ;

}

Ovaj jednostavni C program izračunava i ispisuje površinu kruga pomoću funkcije koja je definirana u prethodnoj datoteci pod nazivom 'circle.h'. Razdvojimo kôd:

#uključi 'krug.h'

Ovaj redak uključuje sadržaj datoteke zaglavlja 'circle.h' u programu. Datoteka zaglavlja vjerojatno sadrži deklaracije funkcija ili makronaredbe koje se odnose na kružne izračune.

int glavni ( ) {

Izvršenje programa počinje s glavnom funkcijom, ulaznom točkom za C programe.

dvostruko rads = 5.0 ;

Varijabla rads tipa double je deklarirana i dodijeljena joj je vrijednost 5.0. Ova varijabla vjerojatno predstavlja radijus kruga.

dvostruko područje = Područje_kruga ( rads ) ;

Funkcija pod nazivom 'Circle_Carea' poziva se s radijusom radijusa kao argumentom, a rezultat se pohranjuje u područje varijable.

printf ( „Površina kruga je: %.2f \n ' , područje ) ;

Rezultat se ispisuje na konzolu koristeći 'printf'. Niz 'Područje kruga je: %.2f\n' je niz oblikovanja s rezerviranim mjestom '%f' za vrijednost površine. “.2” u “%.2f” navodi da se trebaju prikazati samo dva decimalna mjesta.

povratak 0 ;

Glavna funkcija završava vraćanjem 0 što ukazuje na uspješno izvršenje programa operativnom sustavu.

Ukratko, datoteka zaglavlja deklarira funkciju s C vezom, a datoteka implementacije definira logiku za izračunavanje površine kruga. Ovo odvajanje omogućuje korištenje koda u C i C++ programima. Pogledajte izlaz koda koji je dan na sljedećoj slici:

Kao što možete vidjeti u izlazu, izračunata površina kruga je 78,54 što je izračun površine = 3,14*5*5 = 78,54. Funkcija za izračunavanje površine definirana je u datoteci zaglavlja 'circle.h' koja se zatim poziva u C++ datoteci uz pomoć extern 'C'.

Zaključak

Vodili smo vas kroz proces integracije C++ u vaše C programe u ovom vodiču. Integracija C++ funkcionalnosti u C kodne baze zahtijeva pažljivo razmatranje pokazivača, iskrivljenih naziva i datoteka zaglavlja dvostruke namjene. Navedeni primjeri ilustriraju praktičan pristup postizanju te integracije. Sada kada ste vidjeli kako povezati ova dva programska jezika, imate više alata. Otključavanje snage C++-a tijekom rada s C-om moglo bi vašim projektima dati potpuno novu razinu funkcionalnosti.