Zrozumienie podstaw
Jeśli chodzi o wywoływanie funkcji C++ z C i używanie obiektów C++, należy wziąć pod uwagę kilka kluczowych elementów:
Odwoływanie się do klas C++ w C
Typowe podejście do odwoływania się do klas C++ w C polega na użyciu wskaźników do klas, które mogą być przekazywane pomiędzy kodem C i C++.
Imię Mangle
Aby zapobiec zmianom nazw, które mogą mieć wpływ na rozpoznawanie w języku C, ważne jest, aby nazwy były spójne. Dzięki temu C może poprawnie identyfikować i wykorzystywać funkcje i obiekty.
Plik nagłówkowy do podwójnego zastosowania
Plik nagłówkowy odgrywa kluczową rolę, służąc podwójnemu celowi zarówno w C, jak i C++. Zawiera definicje klas rozpoznawalne przez C++ i hermetyzuje funkcje dostępu dla C.
Jak wywołać C++ z C
Aby wywołać funkcje C++ z C, kluczowa jest zewnętrzna deklaracja „C”. Po zastosowaniu do funkcji C++ zapewnia, że nazwy funkcji będą traktowane w stylu C (przy użyciu połączenia C) podczas procesu kompilacji. C nie rozpoznaje funkcji C++, takich jak przeciążanie funkcji i zmienianie nazw, które mogą wystąpić podczas kompilacji C++. Używając zewnętrznego „C”, kompilator C++ generuje nazwy funkcji zgodne z konwencjami C, umożliwiając bezproblemową interoperacyjność. Ta deklaracja zapewnia ustandaryzowany interfejs, umożliwiający kodowi C dostęp do funkcji C++ i korzystanie z nich bez napotykania konfliktów nazewnictwa lub problemów ze zgodnością. Poniżej znajdują się przykłady wywoływania C++ z C. Aby zrozumieć, jak działa ta kombinacja, przyjrzyjmy się bliżej instancjom.
Praktyczne przykłady: Oblicz pole koła, wywołując C++ z C
W tym prostym przykładzie poprowadzimy Cię, jak obliczyć pole koła, wywołując funkcję C++ w C. Kod ten składa się z pliku nagłówkowego (circle.h) i pliku implementacyjnego (circle.cpp). Pierwsza część kodu zawiera zewnętrzną deklarację C w pliku nagłówkowym. Zobacz poniższy kod. Następnie omówmy każdą linię kodu z osobna:
#ifndef OKRĄG_OBSZAR#zdefiniuj OKRĄG_OBSZAR
zewnętrzny 'C' {
podwójnie oblicz_CArea ( podwójnie rad ) ;
}
#endif
podwójnie Okrąg_CArea ( podwójnie rad ) {
powrót 3.14159 * rad * rad ;
}
Podzielmy każdą część:
#ifndef CIRCLE_AREA i #define CIRCLE_AREA
Linie te stanowią część zabezpieczeń włączania, które zapewniają, że zawartość pliku nagłówkowego zostanie uwzględniona tylko raz w procesie kompilacji. Jeżeli nie zdefiniowano CIRCLE_AREA, zostanie uwzględniony kolejny kod i zostanie zdefiniowane CIRCLE_AREA.
zewnętrzny 'C'Ta składnia służy do deklarowania, że następująca funkcja ma powiązanie w języku C. Jest to niezbędne podczas pisania kodu, który będzie wywoływany zarówno w C, jak i C++.
podwójnie oblicz_CArea ( podwójnie rad ) ;W tej linii deklarowana jest funkcja o nazwie „calculate_Carea”, która przyjmuje podwójny argument (rad) i zwraca wartość podwójną.
Zewnętrzna deklaracja „C” w pliku nagłówkowym informuje kompilator, aby użył dla funkcji połączenia w stylu C, dzięki czemu będzie można ją wywołać z kodu C. Użyj tego kodu, aby znaleźć obszar koła, zapisując go w pliku „circle.h”. Po zapisaniu tego pliku nagłówkowego wystarczy dołączyć go jako plik nagłówkowy do programu C++ i wykonać żądaną funkcję. Poniżej znajduje się kod C, który oblicza pole koła. Plik „main.c” zawiera nagłówek C++ i bezpośrednio wywołuje „Circle_Carea”. Zobacz następujący kod:
#include „okrąg.h”wew główny ( ) {
podwójnie rady = 5,0 ;
podwójnie obszar = Okrąg_CArea ( rady ) ;
drukuj ( „Obszar koła wynosi: %.2f \N ' , obszar ) ;
powrót 0 ;
}
Ten prosty program w języku C oblicza i drukuje pole koła za pomocą funkcji zdefiniowanej w poprzednim pliku o nazwie „circle.h”. Rozłóżmy kod:
#include „okrąg.h”Linia ta zawiera zawartość pliku nagłówkowego „circle.h” w programie. Plik nagłówkowy prawdopodobnie zawiera deklaracje funkcji lub makra związane z obliczeniami okręgów.
wew główny ( ) {Wykonywanie programu rozpoczyna się od funkcji głównej, punktu wejścia dla programów C.
podwójnie rady = 5,0 ;Deklarowana jest zmienna rads typu double i przypisuje się jej wartość 5.0. Ta zmienna prawdopodobnie reprezentuje promień okręgu.
podwójnie obszar = Okrąg_CArea ( rady ) ;Wywoływana jest funkcja o nazwie „Circle_Carea” z promieniem rad jako argumentem, a wynik jest zapisywany w obszarze zmiennych.
drukuj ( „Obszar koła wynosi: %.2f \N ' , obszar ) ;Wynik jest drukowany na konsoli za pomocą „printf”. Ciąg „Obszar okręgu to: %.2f\n” to ciąg formatujący z symbolem zastępczym „%f” dla wartości pola. Wartość „.2” w „%.2f” określa, że powinny być wyświetlane tylko dwa miejsca po przecinku.
powrót 0 ;Funkcja główna kończy się zwróceniem wartości 0, co oznacza pomyślne wykonanie programu w systemie operacyjnym.
Podsumowując, plik nagłówkowy deklaruje funkcję z połączeniem w C, a plik implementacyjny definiuje logikę obliczania pola koła. To oddzielenie pozwala na użycie kodu zarówno w programach C, jak i C++. Zapoznaj się z wynikami kodu pokazanymi na poniższym obrazku:
Jak widać na wynikach, obliczona powierzchnia koła wynosi 78,54, co stanowi obliczenie pola = 3,14*5*5 = 78,54. Funkcja obliczająca pole jest zdefiniowana w pliku nagłówkowym „circle.h”, który jest następnie wywoływany w pliku C++ za pomocą zewnętrznego „C”.
Wniosek
W tym przewodniku przeprowadziliśmy Cię przez proces integracji języka C++ z programami w języku C. Integracja funkcjonalności C++ z bazami kodu C wymaga dokładnego rozważenia wskaźników, manipulowania nazwami i plików nagłówkowych o podwójnym przeznaczeniu. Podane przykłady ilustrują praktyczne podejście do osiągnięcia tej integracji. Teraz, gdy wiesz, jak połączyć te dwa języki programowania, masz więcej narzędzi. Odblokowanie mocy C++ podczas pracy z C może zapewnić Twoim projektom zupełnie nowy poziom funkcjonalności.