Roep C++ aan vanuit C

Roep C Aan Vanuit C



Bij het programmeren is het vaak nodig dat C en C++ samenwerken, meestal bij het updaten van een oude code of het combineren van de modules in verschillende talen. Het gebruik van de C++-code in C-programma's is zeer nuttig voor programmeurs, vooral bij het updaten van oude software of het mixen van onderdelen die in beide talen zijn geschreven. Deze handleiding laat u zien hoe u de C++-functies met C kunt laten werken met eenvoudige en nuttige voorbeelden. C++ aanroepen vanuit een C-programma lijkt misschien lastig, maar dit artikel legt alles stap voor stap uit, dus het is gemakkelijk om mee te doen en de twee talen samen te gaan gebruiken. Deze handleiding is nuttig voor uw projecten, ongeacht uw niveau van programmeerkennis.

De basisprincipes begrijpen

Als het gaat om het aanroepen van de C++-functies vanuit C en het gebruik van de C++-objecten, moeten er verschillende belangrijke elementen in overweging worden genomen:

Verwijzen naar de C++-klassen in C

Een gebruikelijke benadering om naar de C++-klassen in C te verwijzen, omvat het gebruik van verwijzingen naar klassen die kunnen worden doorgegeven tussen de C- en C++-code.







Naam Mangel

Om naamsveranderingen te voorkomen die een herkenning in C kunnen beïnvloeden, is het cruciaal om de namen consistent te houden. Dit zorgt ervoor dat C de functies en objecten correct kan identificeren en gebruiken.



Headerbestand voor dubbel doel

Een headerbestand speelt een cruciale rol en dient een dubbel doel voor zowel C als C++. Het bevat de klassendefinities die herkenbaar zijn voor C++ en omvat de accessorfuncties voor C.



Hoe C++ vanuit C te bellen

Om de C++-functies vanuit C aan te roepen, is de externe “C”-declaratie cruciaal. Wanneer het wordt toegepast op C++-functies, zorgt het ervoor dat de functienamen tijdens het compilatieproces worden behandeld in de C-stijl (met behulp van C-koppeling). C herkent de C++-functies niet, zoals overbelasting van functies en het verminken van namen, die kunnen optreden tijdens het compileren van C++. Met behulp van externe “C” genereert de C++-compiler de functienamen die voldoen aan de C-conventies, waardoor een naadloze interoperabiliteit mogelijk is. Deze declaratie biedt een gestandaardiseerde interface, waardoor een C-code toegang kan krijgen tot de C++-functies en deze kan gebruiken zonder dat er naamgevingsconflicten of compatibiliteitsproblemen optreden. Hieronder volgen voorbeelden van het aanroepen van C++ vanuit C. Laten we, om te begrijpen hoe deze combinatie werkt, de instanties nader bekijken.





Praktische voorbeelden: Bereken de oppervlakte van een cirkel door C++ vanuit C aan te roepen

In dit eenvoudige voorbeeld laten we u zien hoe u de oppervlakte van een cirkel kunt berekenen door een C++-functie in C aan te roepen. Deze code bestaat uit een headerbestand (circle.h) en een implementatiebestand (circle.cpp). Het eerste deel van de code omvat de externe C-declaratie in het headerbestand. Zie de volgende code. Laten we vervolgens elke regel code afzonderlijk uitwerken:

#ifndef CIRCLE_AREA
#define CIRCLE_AREA

extern 'C' {

dubbele bereken_CArea ( dubbele rad ) ;

}

#stop als

dubbele Cirkel_CArea ( dubbele rad ) {

opbrengst 3,14159 * rad * rad ;

}

Laten we elk onderdeel opsplitsen:



#ifndef CIRCLE_AREA en #define CIRCLE_AREA

Deze regels maken deel uit van include-guards die ervoor zorgen dat de inhoud van het headerbestand slechts één keer in het compilatieproces wordt opgenomen. Als CIRCLE_AREA niet is gedefinieerd, wordt de daaropvolgende code opgenomen en wordt CIRCLE_AREA gedefinieerd.

extern 'C'

Deze syntaxis wordt gebruikt om te declareren dat de volgende functie een C-koppeling heeft. Dit is essentieel bij het schrijven van code die zowel vanuit C als C++ wordt aangeroepen.

dubbele bereken_CArea ( dubbele rad ) ;

Deze regel declareert een functie met de naam “calculate_Carea” die een dubbel argument (rad) nodig heeft en een dubbele retourneert.

De externe “C”-declaratie in het headerbestand informeert de compiler om een ​​C-stijlkoppeling voor de functie te gebruiken, waardoor deze kan worden aangeroepen vanuit de C-code. Gebruik deze code om de oppervlakte van een cirkel te vinden door deze op te slaan in een “circle.h”-bestand. Nadat u dit headerbestand heeft opgeslagen, hoeft u dit alleen nog maar als headerbestand in het C++-programma op te nemen en de gewenste functie uit te voeren. Het volgende is de C-code die de oppervlakte van een cirkel berekent. Het bestand “main.c” bevat de C++-header en roept rechtstreeks de “Circle_Carea” aan. Zie de volgende code:

#include 'cirkel.h'

int voornaamst ( ) {

dubbele rad = 5,0 ;

dubbele gebied = Cirkel_CArea ( rad ) ;

afdrukkenf ( 'De oppervlakte van de cirkel is: %.2f \N ' , gebied ) ;

opbrengst 0 ;

}

Dit eenvoudige C-programma berekent en drukt het gebied van een cirkel af met behulp van een functie die is gedefinieerd in het vorige bestand met de naam 'circle.h'. Laten we de code opsplitsen:

#include 'cirkel.h'

Deze regel bevat de inhoud van het headerbestand “circle.h” in het programma. Het headerbestand bevat waarschijnlijk de functiedeclaraties of macro's die verband houden met cirkelberekeningen.

int voornaamst ( ) {

De uitvoering van het programma begint met de hoofdfunctie, het startpunt voor C-programma's.

dubbele rad = 5,0 ;

Er wordt een variabele rads van het type double gedeclareerd en toegewezen met de waarde 5,0. Deze variabele vertegenwoordigt waarschijnlijk de straal van de cirkel.

dubbele gebied = Cirkel_CArea ( rad ) ;

Een functie met de naam “Circle_Carea” wordt aangeroepen met de straalrads als argument en het resultaat wordt opgeslagen in het variabele gebied.

afdrukkenf ( 'De oppervlakte van de cirkel is: %.2f \N ' , gebied ) ;

Het resultaat wordt met behulp van “printf” naar de console afgedrukt. De tekenreeks “De oppervlakte van de cirkel is: %.2f\n” is een notatietekenreeks met een tijdelijke aanduiding “%f” voor de gebiedswaarde. De “.2” in “%.2f” geeft aan dat slechts twee decimalen mogen worden weergegeven.

opbrengst 0 ;

De hoofdfunctie eindigt met het retourneren van 0, wat een succesvolle programma-uitvoering naar het besturingssysteem aangeeft.

Samenvattend declareert het headerbestand een functie met C-koppeling, en het implementatiebestand definieert de logica voor het berekenen van het gebied van een cirkel. Door deze scheiding kan de code in zowel C- als C++-programma's worden gebruikt. Raadpleeg de uitvoer van de code die wordt weergegeven in de volgende afbeelding:

Zoals je in de uitvoer kunt zien, is de berekende oppervlakte van de cirkel 78,54, wat de berekening is van de oppervlakte = 3,14*5*5 = 78,54. De functie om de oppervlakte te berekenen wordt gedefinieerd in het headerbestand “circle.h”, dat vervolgens in het C++-bestand wordt aangeroepen met behulp van externe “C”.

Conclusie

In deze handleiding hebben we u door het proces van het integreren van C++ in uw C-programma's geleid. Het integreren van een C++-functionaliteit in C-codebases vereist een zorgvuldige afweging van pointers, naamverminking en headerbestanden met twee doeleinden. De gegeven voorbeelden illustreren een praktische aanpak om deze integratie te bereiken. Nu je hebt gezien hoe je deze twee programmeertalen met elkaar kunt verbinden, heb je meer tools. Als u de kracht van C++ ontgrendelt terwijl u met C werkt, kunnen uw projecten een geheel nieuw functionaliteitsniveau krijgen.