Forstå det grunnleggende
Når det gjelder å påkalle C++-funksjonene fra C og bruke C++-objektene, må flere nøkkelelementer vurderes:
Refererer til C++-klassene i C
En vanlig tilnærming til å referere til C++-klassene i C innebærer å bruke pekere til klasser som kan sendes mellom C- og C++-koden.
Navn Mangle
For å forhindre navneendringer som kan påvirke en gjenkjennelse i C, er det avgjørende å holde navnene konsistente. Dette sikrer at C kan identifisere og utnytte funksjonene og objektene korrekt.
Overskriftsfil for to formål
En overskriftsfil spiller en sentral rolle, og tjener et dobbelt formål for både C og C++. Den inkluderer klassedefinisjonene som er gjenkjennelige av C++ og innkapsler tilgangsfunksjonene for C.
Hvordan ringe C++ fra C
For å kalle C++-funksjonene fra C, er den eksterne 'C'-erklæringen avgjørende. Når den brukes på C++-funksjoner, sikrer det at funksjonsnavnene behandles i C-stilen (ved hjelp av C-kobling) under kompileringsprosessen. C gjenkjenner ikke C++-funksjonene som funksjonsoverbelastning og navnmangling som kan oppstå under C++-kompilering. Ved å bruke ekstern 'C', genererer C++-kompilatoren funksjonsnavnene som følger C-konvensjonene, noe som tillater en sømløs interoperabilitet. Denne erklæringen gir et standardisert grensesnitt, som gjør det mulig for en C-kode å få tilgang til og bruke C++-funksjonene uten å støte på navnekonflikter eller kompatibilitetsproblemer. Følgende er eksempler på å kalle C++ fra C. For å forstå hvordan denne kombinasjonen fungerer, la oss se nærmere på forekomstene.
Praktiske eksempler: Beregn arealet av en sirkel ved å ringe C++ fra C
I dette enkle eksempelet vil vi veilede deg til hvordan du kan beregne arealet til en sirkel ved å kalle en C++ funksjon i C. Denne koden består av en header-fil (sirkel.h) og en implementeringsfil (sirkel.cpp). Den første delen av koden involverer den eksterne C-deklarasjonen i overskriftsfilen. Se følgende kode. La oss deretter utdype hver linje med kode individuelt:
#ifndef CIRCLE_AREA#define CIRCLE_AREA
ekstern 'C' {
dobbelt calculate_Carea ( dobbelt rad ) ;
}
#slutt om
dobbelt Circle_CARea ( dobbelt rad ) {
komme tilbake 3,14159 * rad * rad ;
}
La oss bryte ned hver del:
#ifndef CIRCLE_AREA og #define CIRCLE_AREA
Disse linjene er en del av include guards som sikrer at innholdet i header-filen bare inkluderes én gang i kompileringsprosessen. Hvis CIRCLE_AREA ikke er definert, vil den påfølgende koden bli inkludert og CIRCLE_AREA vil bli definert.
ekstern 'C'Denne syntaksen brukes til å erklære at følgende funksjon har en C-kobling. Dette er viktig når du skriver en kode som skal kalles fra både C og C++.
dobbelt calculate_Carea ( dobbelt rad ) ;Denne linjen erklærer en funksjon kalt 'calculate_Carea' som tar et dobbeltargument (rad) og returnerer en dobbel.
Den eksterne 'C'-erklæringen i overskriftsfilen informerer kompilatoren om å bruke en C-stilkobling for funksjonen, noe som gjør den anropbar fra C-koden. Bruk denne koden til å finne arealet av en sirkel ved å lagre den i en 'circle.h'-fil. Når du har lagret denne overskriftsfilen, er alt du trenger å gjøre å inkludere denne som en overskriftsfil i C++-programmet og utføre ønsket funksjon. Følgende er C-koden som beregner arealet av en sirkel. 'main.c'-filen inkluderer C++-overskriften og kaller opp 'Circle_Carea' direkte. Se følgende kode:
#inkluder 'sirkel.h'int hoved- ( ) {
dobbelt rads = 5.0 ;
dobbelt område = Circle_CARea ( rads ) ;
printf ( «Området av sirkelen er: %.2f \n ' , område ) ;
komme tilbake 0 ;
}
Dette enkle C-programmet beregner og skriver ut en sirkels areal ved hjelp av en funksjon som er definert i den forrige filen kalt 'sirkel.h'. La oss bryte ned koden:
#inkluder 'sirkel.h'Denne linjen inkluderer innholdet i 'circle.h'-headerfilen i programmet. Overskriftsfilen inneholder sannsynligvis funksjonserklæringene eller makroene som er relatert til sirkelberegninger.
int hoved- ( ) {Programmets kjøring starter med hovedfunksjonen, inngangspunktet for C-programmer.
dobbelt rads = 5.0 ;En variabel rads av typen dobbel er deklarert og tildelt verdien 5.0. Denne variabelen representerer sannsynligvis sirkelens radius.
dobbelt område = Circle_CARea ( rads ) ;En funksjon kalt 'Circle_Carea' kalles med radius rads som argument og resultatet lagres i variabelområdet.
printf ( 'Arealet til sirkelen er: %.2f \n ' , område ) ;Resultatet skrives ut til konsollen ved å bruke 'printf'. 'Arealet til sirkelen er: %.2f\n'-strengen er en formatstreng med en '%f'-plassholder for områdeverdien. '.2' i '%.2f' spesifiserer at bare to desimaler skal vises.
komme tilbake 0 ;Hovedfunksjonen avsluttes med å returnere 0 som indikerer en vellykket programkjøring til operativsystemet.
Oppsummert erklærer overskriftsfilen en funksjon med C-kobling, og implementeringsfilen definerer logikken for å beregne arealet til en sirkel. Denne separasjonen gjør at koden kan brukes i både C- og C++-programmer. Se utdataene til koden som er gitt i følgende bilde:
Som du kan se i utdataene, er det beregnede arealet av sirkelen 78,54 som er beregningen av arealet = 3,14*5*5 = 78,54. Funksjonen for å beregne arealet er definert i 'circle.h' header-filen som deretter kalles i C++-filen ved hjelp av ekstern 'C'.
Konklusjon
Vi guidet deg gjennom prosessen med å integrere C++ i C-programmene dine i denne veiledningen. Å integrere en C++-funksjonalitet i C-kodebaser krever nøye vurdering av pekere, navnemangling og overskriftsfiler med to formål. De medfølgende eksemplene illustrerer en praktisk tilnærming til å oppnå denne integrasjonen. Nå som du har sett hvordan du kobler disse to programmeringsspråkene, har du flere verktøy. Å låse opp kraften til C++ mens du jobber med C kan gi prosjektene dine et helt nytt nivå av funksjonalitet.