Ring C++ från C

Ring C Fran C



Inom programmering finns det ofta ett behov av att C och C++ fungerar tillsammans, vanligtvis när man uppdaterar en gammal kod eller kombinerar modulerna på olika språk. Att använda C++-koden i C-program är till stor hjälp för programmerare, speciellt när man uppdaterar en gammal programvara eller blandar delarna som är skrivna på båda språken. Den här guiden visar hur du får C++-funktionerna att fungera med C med enkla och användbara exempel. Att anropa C++ från ett C-program kan verka knepigt, men den här artikeln förklarar allt steg för steg, så det är lätt att följa med och börja använda de två språken tillsammans. Den här guiden är användbar för dina projekt oavsett din nivå av programmeringskunskaper.

Förstå grunderna

När det gäller att anropa C++-funktionerna från C och använda C++-objekten måste flera nyckelelement beaktas:

Refererar till C++-klasserna i C

En vanlig metod för att referera till C++-klasserna i C innebär att man använder pekare till klasser som kan skickas mellan C- och C++-koden.







Namn Mangle

För att förhindra namnändringar som kan påverka en igenkänning i C, är det viktigt att hålla namnen konsekventa. Detta säkerställer att C korrekt kan identifiera och använda funktionerna och objekten.



Header-fil för dubbla ändamål

En header-fil spelar en central roll och tjänar ett dubbelt syfte för både C och C++. Den inkluderar klassdefinitionerna som kan kännas igen av C++ och kapslar in accessorfunktionerna för C.



Hur man ringer C++ från C

För att anropa C++-funktionerna från C är den externa 'C'-deklarationen avgörande. När den tillämpas på C++-funktioner säkerställer den att funktionsnamnen behandlas i C-stilen (med C-länkning) under kompileringsprocessen. C känner inte igen C++-funktionerna som funktionsöverbelastning och namnmangling som kan inträffa under C++-kompilering. Med hjälp av extern 'C' genererar C++-kompilatorn funktionsnamn som följer C-konventioner, vilket möjliggör en sömlös interoperabilitet. Denna deklaration tillhandahåller ett standardiserat gränssnitt, vilket gör att en C-kod kan komma åt och använda C++-funktionerna utan att stöta på namnkonflikter eller kompatibilitetsproblem. Följande är exempel på att anropa C++ från C. För att förstå hur denna kombination fungerar, låt oss titta närmare på instanserna.





Praktiska exempel: Beräkna arean av en cirkel genom att anropa C++ från C

I det här enkla exemplet kommer vi att guida dig om hur du kan beräkna arean av en cirkel genom att anropa en C++-funktion i C. Denna kod består av en header-fil (circle.h) och en implementeringsfil (circle.cpp). Den första delen av koden involverar den externa C-deklarationen i rubrikfilen. Se följande kod. Låt oss sedan utveckla varje kodrad individuellt:

#ifndef CIRCLE_AREA
#define CIRCLE_AREA

extern 'C' {

dubbel calculate_Carea ( dubbel rad ) ;

}

#endif

dubbel Circle_Crea ( dubbel rad ) {

lämna tillbaka 3,14159 * rad * rad ;

}

Låt oss dela upp varje del:



#ifndef CIRCLE_AREA och #define CIRCLE_AREA

Dessa rader är en del av include guards som säkerställer att innehållet i rubrikfilen endast ingår en gång i kompileringsprocessen. Om CIRCLE_AREA inte är definierad, kommer den efterföljande koden att inkluderas och CIRCLE_AREA kommer att definieras.

extern 'C'

Denna syntax används för att deklarera att följande funktion har en C-länkning. Detta är viktigt när du skriver en kod som kommer att anropas från både C och C++.

dubbel calculate_Carea ( dubbel rad ) ;

Den här raden deklarerar en funktion som heter 'calculate_Carea' som tar ett dubbelt argument (rad) och returnerar en dubbel.

Den externa 'C'-deklarationen i rubrikfilen informerar kompilatorn att använda en C-liknande länkning för funktionen, vilket gör den anropbar från C-koden. Använd den här koden för att hitta arean av en cirkel genom att spara den i en 'circle.h'-fil. När du väl har sparat den här rubrikfilen är allt du behöver göra att inkludera den som en rubrikfil i C++-programmet och utföra önskad funktion. Följande är C-koden som beräknar arean av en cirkel. Filen 'main.c' innehåller C++-huvudet och anropar 'Circle_Carea' direkt. Se följande kod:

#inkludera 'cirkel.h'

int huvud ( ) {

dubbel rads = 5.0 ;

dubbel område = Circle_Crea ( rads ) ;

printf ( 'Arean på cirkeln är: %.2f \n ' , område ) ;

lämna tillbaka 0 ;

}

Detta enkla C-program beräknar och skriver ut en cirkels area med hjälp av en funktion som definieras i den föregående filen med namnet 'circle.h'. Låt oss dela upp koden:

#inkludera 'cirkel.h'

Den här raden inkluderar innehållet i rubrikfilen 'circle.h' i programmet. Rubrikfilen innehåller sannolikt funktionsdeklarationer eller makron som är relaterade till cirkelberäkningar.

int huvud ( ) {

Programmets exekvering börjar med huvudfunktionen, ingångspunkten för C-program.

dubbel rads = 5.0 ;

En variabel rads av typen dubbel deklareras och tilldelas med värdet 5.0. Denna variabel representerar sannolikt cirkelns radie.

dubbel område = Circle_Crea ( rads ) ;

En funktion som heter 'Circle_Carea' anropas med radien rads som argument och resultatet lagras i variabelområdet.

printf ( 'Arean av cirkeln är: %.2f \n ' , område ) ;

Resultatet skrivs ut till konsolen med 'printf'. Strängen 'Cirkelns area är: %.2f\n' är en formatsträng med en '%f' platshållare för areavärdet. '.2' i '%.2f' anger att endast två decimaler ska visas.

lämna tillbaka 0 ;

Huvudfunktionen avslutas med att returnera 0 vilket indikerar en framgångsrik programexekvering till operativsystemet.

Sammanfattningsvis deklarerar rubrikfilen en funktion med C-länkning, och implementeringsfilen definierar logiken för att beräkna en cirkels area. Denna separation gör att koden kan användas i både C- och C++-program. Se utdata från koden som ges i följande bild:

Som du kan se i utgången är den beräknade arean av cirkeln 78,54 vilket är beräkningen av area = 3,14*5*5 = 78,54. Funktionen för att beräkna arean definieras i rubrikfilen 'circle.h' som sedan anropas i C++-filen med hjälp av extern 'C'.

Slutsats

Vi guidade dig genom processen att integrera C++ i dina C-program i den här guiden. Att integrera en C++-funktionalitet i C-kodbaser kräver noggrant övervägande av pekare, namnmangling och dubbelfunktionshuvudfiler. De medföljande exemplen illustrerar ett praktiskt tillvägagångssätt för att uppnå denna integration. Nu när du har sett hur du kopplar ihop dessa två programmeringsspråk har du fler verktyg. Att låsa upp kraften i C++ medan du arbetar med C kan ge dina projekt en helt ny nivå av funktionalitet.