Perusasioiden ymmärtäminen
Kun kyse on C++-funktioiden kutsumisesta C:stä ja C++-objektien käyttämisestä, useita avainelementtejä on harkittava:
Viitataan C++-luokkiin C:ssä
Yleinen lähestymistapa viitata C++-luokkiin C:ssä sisältää osoittimien käyttämisen luokkiin, jotka voidaan siirtää C- ja C++-koodin välillä.
Nimi Mangle
Jotta estetään nimenmuutokset, jotka voivat vaikuttaa C:n tunnistukseen, on tärkeää pitää nimet johdonmukaisina. Tämä varmistaa, että C pystyy tunnistamaan ja hyödyntämään funktioita ja objekteja oikein.
Otsikkotiedosto kahteen tarkoitukseen
Otsikkotiedostolla on keskeinen rooli, ja se palvelee kahta tarkoitusta sekä C:lle että C++:lle. Se sisältää luokkamäärittelyt, jotka C++ tunnistaa ja kapseloi C:n aksessorifunktiot.
Kuinka soittaa C++:aan C:stä
C++-funktioiden kutsumiseksi C:stä ulkoinen C-ilmoitus on ratkaiseva. Kun sitä käytetään C++-funktioihin, se varmistaa, että funktioiden nimet käsitellään C-tyylillä (käyttäen C-linkkiä) käännösprosessin aikana. C ei tunnista C++:n ominaisuuksia, kuten toimintojen ylikuormitusta ja nimien sotkemista, joita voi esiintyä C++:n kääntämisen aikana. Käyttämällä ulkoista 'C' C++-kääntäjä luo funktioiden nimet, jotka noudattavat C-käytäntöjä, mikä mahdollistaa saumattoman yhteentoimivuuden. Tämä ilmoitus tarjoaa standardoidun käyttöliittymän, jonka avulla C-koodi voi käyttää ja käyttää C++-toimintoja ilman nimiristiriitoja tai yhteensopivuusongelmia. Seuraavassa on esimerkkejä C++:n kutsumisesta C:stä. Ymmärtääksemme, kuinka tämä yhdistelmä toimii, katsotaanpa tapauksia tarkemmin.
Käytännön esimerkkejä: Laske ympyrän pinta-ala soittamalla C++:sta C
Tässä yksinkertaisessa esimerkissä opastamme sinua kuinka voit laskea ympyrän alueen kutsumalla C++-funktiota C:ssä. Tämä koodi koostuu otsikkotiedostosta (circle.h) ja toteutustiedostosta (circle.cpp). Koodin ensimmäinen osa sisältää ulkoisen C-ilmoituksen otsikkotiedostossa. Katso seuraava koodi. Tarkastellaan sitten jokaista koodiriviä erikseen:
#ifndef CIRCLE_AREA#define CIRCLE_AREA
ulkoinen 'C' {
kaksinkertainen laske_CAalue ( kaksinkertainen rad ) ;
}
#loppu Jos
kaksinkertainen Circle_CArea ( kaksinkertainen rad ) {
palata 3,14159 * rad * rad ;
}
Puretaan jokainen osa:
#ifndef CIRCLE_AREA ja #define CIRCLE_AREA
Nämä rivit ovat osa sisällytyssuojaa, joka varmistaa, että otsikkotiedoston sisältö sisällytetään vain kerran käännösprosessiin. Jos CIRCLE_AREA ei ole määritetty, seuraava koodi sisällytetään ja CIRCLE_AREA määritellään.
ulkoinen 'C'Tätä syntaksia käytetään ilmoittamaan, että seuraavalla funktiolla on C-linkki. Tämä on välttämätöntä kirjoitettaessa koodia, jota kutsutaan sekä C:stä että C++:sta.
kaksinkertainen laske_CAalue ( kaksinkertainen rad ) ;Tämä rivi ilmoittaa funktion nimeltä 'calculate_Carea', joka ottaa kaksoisargumentin (rad) ja palauttaa tuplaargumentin.
Otsikkotiedoston ulkoinen C-ilmoitus kehottaa kääntäjää käyttämään funktiolle C-tyylistä linkitystä, jolloin se voidaan kutsua C-koodista. Käytä tätä koodia löytääksesi ympyrän alueen tallentamalla se 'circle.h'-tiedostoon. Kun olet tallentanut tämän otsikkotiedoston, sinun tarvitsee vain sisällyttää se otsikkotiedostoksi C++-ohjelmaan ja suorittaa haluttu toiminto. Seuraava on C-koodi, joka laskee ympyrän alueen. Main.c-tiedosto sisältää C++-otsikon ja kutsuu 'Circle_Carea' suoraan. Katso seuraava koodi:
#include 'circle.h'int pää ( ) {
kaksinkertainen rads = 5.0 ;
kaksinkertainen alueella = Circle_CArea ( rads ) ;
printf ( 'Ympyrän pinta-ala on: %.2f \n ' , alueella ) ;
palata 0 ;
}
Tämä yksinkertainen C-ohjelma laskee ja tulostaa ympyrän alueen käyttämällä funktiota, joka on määritelty edellisessä tiedostossa nimeltä 'circle.h'. Puretaan koodi:
#include 'circle.h'Tämä rivi sisältää ohjelman 'circle.h' otsikkotiedoston sisällön. Otsikkotiedosto sisältää todennäköisesti ympyrälaskuihin liittyvät funktiomääritykset tai makrot.
int pää ( ) {Ohjelman suoritus alkaa päätoiminnolla, C-ohjelmien aloituspisteellä.
kaksinkertainen rads = 5.0 ;Double-tyyppinen muuttuja rads ilmoitetaan ja sille annetaan arvo 5.0. Tämä muuttuja edustaa todennäköisesti ympyrän sädettä.
kaksinkertainen alueella = Circle_CArea ( rads ) ;Funktiota nimeltä 'Circle_Carea' kutsutaan säde rad:illa argumenttina ja tulos tallennetaan muuttuja-alueelle.
printf ( 'Ympyrän pinta-ala on %.2f \n ' , alueella ) ;Tulos tulostetaan konsoliin käyttämällä 'printf' -toimintoa. 'Ympyrän pinta-ala on: %.2f\n' on muotomerkkijono, jossa on '%f'-paikkamerkki alueen arvolle. '.2' kohdassa '%.2f' määrittää, että vain kaksi desimaaleja tulee näyttää.
palata 0 ;Päätoiminto päättää palauttamalla 0:n, joka ilmaisee ohjelman onnistuneen suorituksen käyttöjärjestelmässä.
Yhteenvetona voidaan todeta, että otsikkotiedosto ilmoittaa funktion, jossa on C-linkki, ja toteutustiedosto määrittelee ympyrän alueen laskemisen logiikan. Tämä erottelu mahdollistaa koodin käytön sekä C- että C++-ohjelmissa. Katso koodin tulos, joka on annettu seuraavassa kuvassa:
Kuten tuloksesta näkyy, ympyrän laskettu pinta-ala on 78,54, mikä on pinta-alan laskenta = 3,14*5*5 = 78,54. Alueen laskentafunktio määritellään 'circle.h'-otsikkotiedostossa, jota kutsutaan sitten C++-tiedostossa ulkoisen 'C':n avulla.
Johtopäätös
Tässä oppaassa opastimme sinua C++:n integroinnissa C-ohjelmiisi. C++-toiminnon integroiminen C-koodikantoihin vaatii huolellista osoittimien, nimien muokkauksen ja kaksikäyttöisten otsikkotiedostojen harkintaa. Esitetyt esimerkit havainnollistavat käytännön lähestymistapaa tämän integroinnin saavuttamiseksi. Nyt kun olet nähnyt näiden kahden ohjelmointikielen yhdistämisen, sinulla on enemmän työkaluja. C++:n tehon vapauttaminen C:n kanssa työskennellessäsi voi antaa projekteillesi aivan uuden tason toimintoja.