Pagrindų supratimas
Kalbant apie C++ funkcijų iškvietimą iš C ir naudojant C++ objektus, reikia atsižvelgti į keletą pagrindinių elementų:
Nuoroda į C++ klases C
Įprastas būdas nurodyti C++ klases C apima rodyklių naudojimą į klases, kurias galima perduoti tarp C ir C++ kodų.
Vardas Mangle
Norint išvengti vardo pakeitimų, kurie gali turėti įtakos atpažinimui C, labai svarbu, kad vardai būtų nuoseklūs. Tai užtikrina, kad C gali teisingai identifikuoti ir panaudoti funkcijas bei objektus.
Dvigubos paskirties antraštės failas
Antraštės failas atlieka pagrindinį vaidmenį ir atlieka dvejopą paskirtį tiek C, tiek C++. Tai apima klasių apibrėžimus, kuriuos atpažįsta C++, ir apima C priedų funkcijas.
Kaip paskambinti C++ iš C
Norint iškviesti C++ funkcijas iš C, labai svarbi išorinė „C“ deklaracija. Taikant C++ funkcijoms, ji užtikrina, kad kompiliavimo proceso metu funkcijų pavadinimai būtų traktuojami C stiliumi (naudojant C sąsają). C neatpažįsta C++ ypatybių, tokių kaip funkcijų perkrovimas ir vardų sugadinimas, kurie gali atsirasti kompiliuojant C++. Naudodamas išorinį „C“, C++ kompiliatorius generuoja funkcijų pavadinimus, kurie atitinka C konvencijas, todėl užtikrina sklandų sąveiką. Ši deklaracija suteikia standartizuotą sąsają, leidžiančią C kodui pasiekti ir naudoti C++ funkcijas, nesusiduriant su pavadinimų konfliktais ar suderinamumo problemomis. Toliau pateikiami C++ iškvietimo iš C pavyzdžiai. Norėdami suprasti, kaip veikia šis derinys, pažvelkime atidžiau į atvejus.
Praktiniai pavyzdžiai: Apskaičiuokite apskritimo plotą skambindami C++ iš C
Šiame paprastame pavyzdyje paaiškinsime, kaip galite apskaičiuoti apskritimo plotą, iškvietę C++ funkciją C. Šį kodą sudaro antraštės failas (circle.h) ir įgyvendinimo failas (circle.cpp). Pirmoji kodo dalis apima išorinę C deklaraciją antraštės faile. Žiūrėkite toliau pateiktą kodą. Tada panagrinėkime kiekvieną kodo eilutę atskirai:
#ifndef CIRCLE_AREA#define CIRCLE_AREA
išorinis 'C' {
dvigubai apskaičiuoti_CArea ( dvigubai rad ) ;
}
#endif
dvigubai Circle_CArea ( dvigubai rad ) {
grąžinti 3.14159 * rad * rad ;
}
Išskaidykime kiekvieną dalį:
#ifndef CIRCLE_AREA ir #define CIRCLE_AREA
Šios eilutės yra įtraukimo apsaugos dalis, kuri užtikrina, kad antraštės failo turinys įtraukiamas tik vieną kartą į kompiliavimo procesą. Jei CIRCLE_AREA neapibrėžtas, bus įtrauktas tolesnis kodas ir apibrėžta CIRCLE_AREA.
išorinis 'C'Ši sintaksė naudojama deklaruoti, kad ši funkcija turi C ryšį. Tai būtina rašant kodą, kuris bus iškviestas iš C ir C++.
dvigubai apskaičiuoti_CArea ( dvigubai rad ) ;Ši eilutė deklaruoja funkciją, pavadintą „calculate_Carea“, kuri paima dvigubą argumentą (rad) ir grąžina dvigubą.
Išorinė „C“ deklaracija antraštės faile informuoja kompiliatorių, kad funkcijai naudotų C stiliaus nuorodą, todėl ją galima iškviesti iš C kodo. Naudokite šį kodą, kad rastumėte apskritimo plotą, išsaugodami jį 'circle.h' faile. Išsaugojus šį antraštės failą, tereikia įtraukti jį kaip antraštės failą į C++ programą ir atlikti norimą funkciją. Toliau pateikiamas C kodas, apskaičiuojantis apskritimo plotą. „main.c“ faile yra C++ antraštė ir tiesiogiai iškviečiamas „Circle_Carea“. Žiūrėkite šį kodą:
#include 'circle.h'tarpt pagrindinis ( ) {
dvigubai rads = 5.0 ;
dvigubai plotas = Circle_CArea ( rads ) ;
printf ( 'Apskritimo plotas yra: %.2f \n “ , plotas ) ;
grąžinti 0 ;
}
Ši paprasta C programa apskaičiuoja ir atspausdina apskritimo plotą naudodama funkciją, kuri apibrėžta ankstesniame faile pavadinimu 'circle.h'. Išskaidykime kodą:
#include 'circle.h'Šioje eilutėje yra programos antraštės failo „circle.h“ turinys. Tikėtina, kad antraštės faile yra funkcijų deklaracijos arba makrokomandos, susijusios su apskritimo skaičiavimais.
tarpt pagrindinis ( ) {Programos vykdymas prasideda nuo pagrindinės funkcijos, C programų įėjimo taško.
dvigubai rads = 5.0 ;Deklaruojamas dvigubo tipo kintamasis rads ir jam priskiriama 5,0 reikšmė. Šis kintamasis greičiausiai reiškia apskritimo spindulį.
dvigubai plotas = Circle_CArea ( rads ) ;Funkcija pavadinimu „Circle_Carea“ iškviečiama naudojant spindulio rads kaip argumentą, o rezultatas išsaugomas kintamojo srityje.
printf ( 'Apskritimo plotas yra: %.2f \n “ , plotas ) ;Rezultatas atspausdinamas į konsolę naudojant 'printf'. Eilutė „Apskritimo plotas yra: %.2f\n“ yra formato eilutė su „%f“ vietos reikšmės rezervuota vieta. „.2“ „%.2f“ nurodo, kad turi būti rodomi tik du skaitmenys po kablelio.
grąžinti 0 ;Pagrindinė funkcija baigiama grąžinant 0, o tai rodo sėkmingą programos vykdymą operacinei sistemai.
Apibendrinant galima pasakyti, kad antraštės failas deklaruoja funkciją su C ryšiu, o įgyvendinimo failas apibrėžia apskritimo ploto skaičiavimo logiką. Šis atskyrimas leidžia kodą naudoti tiek C, tiek C++ programose. Žr. kodo išvestį, pateiktą šiame paveikslėlyje:
Kaip matote išvestyje, apskaičiuotas apskritimo plotas yra 78,54, tai yra ploto apskaičiavimas = 3,14 * 5 * 5 = 78,54. Ploto skaičiavimo funkcija yra apibrėžta antraštės faile 'circle.h', kuris vėliau iškviečiamas C++ faile naudojant išorinį 'C'.
Išvada
Šiame vadove paaiškinome, kaip integruoti C++ į C programas. Norint integruoti C++ funkciją į C kodų bazes, reikia atidžiai apsvarstyti nuorodas, vardų keitimą ir dvejopos paskirties antraščių failus. Pateikti pavyzdžiai iliustruoja praktinį požiūrį į šią integraciją. Dabar, kai pamatėte, kaip sujungti šias dvi programavimo kalbas, turite daugiau įrankių. Atlaisvinus C++ galią dirbant su C, jūsų projektai gali įgyti visiškai naują funkcionalumo lygį.