Volejte C++ z C

Volejte C Z C



Při programování je často potřeba, aby C a C++ spolupracovaly, obvykle při aktualizaci starého kódu nebo kombinování modulů v různých jazycích. Použití kódu C++ v programech C je pro programátory velmi užitečné, zejména při aktualizaci starého softwaru nebo při míchání částí, které jsou napsány v obou jazycích. Tato příručka vám na jednoduchých a užitečných příkladech ukáže, jak zajistit, aby funkce C++ fungovaly s C. Volání C++ z programu C se může zdát složité, ale tento článek vysvětluje vše krok za krokem, takže je snadné sledovat a začít používat oba jazyky společně. Tato příručka je užitečná pro vaše projekty bez ohledu na úroveň vašich znalostí programování.

Pochopení základů

Pokud jde o vyvolávání funkcí C++ z C a používání objektů C++, je třeba zvážit několik klíčových prvků:

Odkazování na třídy C++ v C

Běžný přístup k odkazování na třídy C++ v C zahrnuje použití ukazatelů na třídy, které lze předávat mezi kódem C a C++.







Jméno Mangle

Aby se zabránilo změnám názvů, které mohou ovlivnit rozpoznávání v C, je důležité udržovat názvy konzistentní. To zajišťuje, že C může správně identifikovat a využívat funkce a objekty.



Soubor záhlaví pro dvojí účel

Soubor záhlaví hraje klíčovou roli a slouží dvojímu účelu pro C i C++. Zahrnuje definice tříd, které jsou rozpoznatelné v C++, a zapouzdřuje funkce přístupového objektu pro C.



Jak volat C++ z C

Pro volání funkcí C++ z C je klíčová externí deklarace „C“. Při použití na funkce C++ zajišťuje, že názvy funkcí jsou během procesu kompilace zpracovávány ve stylu C (pomocí C-linkage). C nerozpozná funkce C++, jako je přetížení funkcí a mandlování názvů, ke kterým může dojít během kompilace C++. Pomocí externího „C“ kompilátor C++ generuje názvy funkcí, které odpovídají konvencím jazyka C, což umožňuje bezproblémovou interoperabilitu. Tato deklarace poskytuje standardizované rozhraní, které umožňuje kódu C přistupovat k funkcím C++ a využívat je, aniž by došlo ke konfliktům názvů nebo problémům s kompatibilitou. Následují příklady volání C++ z C. Abychom pochopili, jak tato kombinace funguje, podívejme se blíže na instance.





Praktické příklady: Vypočítejte obsah kruhu voláním C++ z C

V tomto jednoduchém příkladu vás provedeme tím, jak můžete vypočítat plochu kruhu voláním funkce C++ v C. Tento kód se skládá z hlavičkového souboru (circle.h) a implementačního souboru (circle.cpp). První část kódu zahrnuje externí deklaraci C v hlavičkovém souboru. Viz následující kód. Poté se pojďme podrobněji zabývat každým řádkem kódu samostatně:

#ifndef CIRCLE_AREA
#define CIRCLE_AREA

externí 'C' {

dvojnásobek vypočítat_CAarea ( dvojnásobek rad ) ;

}

#endif

dvojnásobek Circle_CArea ( dvojnásobek rad ) {

vrátit se 3,14159 * rad * rad ;

}

Pojďme si jednotlivé části rozebrat:



#ifndef CIRCLE_AREA a #define CIRCLE_AREA

Tyto řádky jsou součástí include guards, který zajišťuje, že obsah hlavičkového souboru bude zahrnut do procesu kompilace pouze jednou. Pokud není CIRCLE_AREA definována, bude zahrnut následný kód a bude definován CIRCLE_AREA.

externí 'C'

Tato syntaxe se používá k prohlášení, že následující funkce má vazbu C. To je nezbytné při psaní kódu, který bude volán z C i C++.

dvojnásobek vypočítat_CAarea ( dvojnásobek rad ) ;

Tento řádek deklaruje funkci s názvem „calculate_Carea“, která přebírá dvojitý argument (rad) a vrací double.

Externí deklarace „C“ v hlavičkovém souboru informuje kompilátor, aby pro funkci použil vazbu ve stylu C, takže ji lze volat z kódu C. Tento kód použijte k nalezení oblasti kruhu jeho uložením do souboru „circle.h“. Jakmile uložíte tento hlavičkový soubor, vše, co musíte udělat, je zahrnout jej jako hlavičkový soubor do programu C++ a provést požadovanou funkci. Následuje kód C, který vypočítá plochu kruhu. Soubor „main.c“ obsahuje hlavičku C++ a přímo volá „Circle_Carea“. Viz následující kód:

#include 'circle.h'

int hlavní ( ) {

dvojnásobek rads = 5,0 ;

dvojnásobek plocha = Circle_CArea ( rads ) ;

printf ( 'Oblast kruhu je:  %.2f \n ' , plocha ) ;

vrátit se 0 ;

}

Tento jednoduchý program v jazyce C vypočítá a vytiskne plochu kruhu pomocí funkce, která je definována v předchozím souboru s názvem „circle.h“. Pojďme rozebrat kód:

#include 'circle.h'

Tento řádek obsahuje obsah hlavičkového souboru „circle.h“ v programu. Soubor záhlaví pravděpodobně obsahuje deklarace funkcí nebo makra, která souvisejí s výpočty kruhů.

int hlavní ( ) {

Provádění programu začíná hlavní funkcí, vstupním bodem pro programy C.

dvojnásobek rads = 5,0 ;

Proměnná rad typu double je deklarována a přiřazena s hodnotou 5.0. Tato proměnná pravděpodobně představuje poloměr kruhu.

dvojnásobek plocha = Circle_CArea ( rads ) ;

Funkce s názvem „Circle_Carea“ je volána s radius rads jako argument a výsledek je uložen v oblasti proměnné.

printf ( 'Obsah kruhu je: %.2f \n ' , plocha ) ;

Výsledek se vytiskne do konzole pomocí „printf“. Řetězec „Plocha kruhu je: %.2f\n“ je formátovací řetězec se zástupným znakem „%f“ pro hodnotu oblasti. '.2' v '%.2f' určuje, že se mají zobrazovat pouze dvě desetinná místa.

vrátit se 0 ;

Hlavní funkce končí návratem 0, což znamená úspěšné provedení programu operačnímu systému.

Stručně řečeno, soubor záhlaví deklaruje funkci s propojením C a soubor implementace definuje logiku pro výpočet plochy kruhu. Toto oddělení umožňuje použití kódu v programech C i C++. Podívejte se na výstup kódu, který je uveden na následujícím obrázku:

Jak můžete vidět na výstupu, vypočtená plocha kruhu je 78,54, což je výpočet plochy = 3,14*5*5 = 78,54. Funkce pro výpočet plochy je definována v hlavičkovém souboru „circle.h“, který je pak vyvolán v souboru C++ pomocí externího „C“.

Závěr

V této příručce jsme vás provedli procesem integrace C++ do vašich programů C. Integrace funkcí C++ do kódových bází C vyžaduje pečlivé zvážení ukazatelů, změny názvů a dvouúčelových hlavičkových souborů. Uvedené příklady ilustrují praktický přístup k dosažení této integrace. Nyní, když jste viděli, jak propojit tyto dva programovací jazyky, máte více nástrojů. Odemknutí síly C++ při práci s C může dát vašim projektům zcela novou úroveň funkčnosti.