Zalecane, 2022

Wybór Redakcji

Różnica między Inline i Macro w C ++

Makro jest instrukcją, która rozwija się w momencie jej inwokacji. Można również definiować funkcje, takie jak makra. Podobnie funkcje inline również rozszerzają się w momencie jego wywoływania. Podstawową różnicą pomiędzy funkcją inline i macro jest fakt, że funkcje inline są rozszerzane podczas kompilacji, a makra są rozszerzane, gdy program jest przetwarzany przez preprocesor .

Przeanalizujmy różnicę między inline i macro przy pomocy tabeli porównawczej.

Wykres porównania

Podstawa do porównaniaInlineMakro
PodstawowyFunkcje inline są analizowane przez kompilator.Makra są rozszerzane przez preprocesor.
Składniainline return_type funct_name (parametry) {. . . }#define nazwa_ makra char_sequence
Używane słowa kluczoweinline
#definiować
ZdefiniowanyMożna go zdefiniować wewnątrz lub na zewnątrz klasy.Jest zawsze zdefiniowany na początku programu.
OcenaOcenia argument tylko raz.Ocenia argument za każdym razem, gdy jest używany w kodzie.
EkspansjaKompilator nie może wstawiać i rozszerzać wszystkich funkcji.Makra są zawsze rozszerzane.
AutomatyzacjaKrótkie funkcje zdefiniowane w klasie są automatycznie wprowadzane do funkcji inline.Makra powinny być określone dokładnie.
DostępFunkcja inline member może uzyskać dostęp do elementów danych klasy.Makra nigdy nie mogą być członkami klasy i nie mogą uzyskać dostępu do elementów danych klasy.
ZakończenieDefinicja funkcji inline kończy się nawiasami klamrowymi na końcu funkcji inline.Definicja makra kończy się z nową linią.
DebugowanieDebugowanie jest łatwe dla funkcji inline, ponieważ sprawdzanie błędów odbywa się podczas kompilacji.Debugowanie staje się trudne dla makr, ponieważ sprawdzanie błędów nie występuje podczas kompilacji.
WiążącyFunkcja inline bardzo dobrze łączy wszystkie instrukcje w ciele funkcji, ponieważ treść funkcji zaczyna się i kończy nawiasami klamrowymi.Makro napotyka problem z bindowaniem, jeśli ma więcej niż jedną instrukcję, ponieważ nie ma symbolu zakończenia.

Definicja Inline

Funkcja inline wygląda jak zwykła funkcja, ale jest poprzedzona słowem kluczowym " inline ". Funkcje inline są funkcjami krótkookresowymi, które są rozszerzane w momencie ich wywoływania, zamiast wywoływania. Rozumiem funkcje wbudowane na przykładzie.

 #include using namespace std; Przykład klasy {int a, b; public: inline void initialize (int x, int y) {a = x; b = y} void display () {cout << a << "" < 

W powyższym programie zadeklarowałem i zdefiniowałem funkcję initialization (), jako funkcję inline w klasie "example". Kod funkcji initialization () zostanie rozwinięty tam, gdzie jest wywoływany przez obiekt klasy "example". Funkcja display () zdefiniowana w klasie przykład nie jest deklarowana inline, ale może być uznana za wbudowaną przez kompilator, jako w C ++ funkcja zdefiniowana w klasie jest automatycznie tworzona w linii przez kompilator, biorąc pod uwagę długość funkcji.

  • Funkcja inline redukuje narzut funkcji wywoływania i zwracania, co z kolei skraca czas wykonywania programu. Ponadto, argumenty są wypychane na stos, a rejestry są zapisywane, gdy wywoływana jest funkcja i resetowane po powrocie funkcji, co zajmuje czas, jest to unikane przez funkcje inline, ponieważ nie ma potrzeby tworzenia zmiennych lokalnych i parametrów formalnych za każdym razem .
  • Funkcje Inline mogą być członkami klasy i mogą także uzyskać dostęp do elementu danych klasy.
  • Funkcja inline redukuje czas wykonania programu, ale czasami, jeśli długość funkcji inline jest większa, rozmiar programu również wzrośnie z powodu zduplikowanego kodu. Dlatego dobrą praktyką jest wprowadzanie bardzo małych funkcji.
  • Argument funkcji inline jest oceniany tylko raz.

Definicja makro

Makro jest "dyrektywą preprocesora". Przed kompilacją program jest sprawdzany przez preprocesor i gdziekolwiek znajduje makro w programie, zastępuje makro przez jego definicję. Dlatego makro jest uważane za "zastępowanie tekstu". Pozwól nam studiować makro na przykładzie.

 #include #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Większy z 10 i 20 to" << GREATER ("20", "10") << "\ n"; return 0; } 

W powyższym kodzie deklarowałem funkcję makro GREATER (), która porównuje i znajduje większą liczbę obu parametrów. Można zauważyć, że nie ma średnika kończącego makro, ponieważ makro jest kończone tylko przez nową linię. Ponieważ makro jest tylko zamiennikiem tekstu, rozszerzy kod makra, w którym jest wywoływany.

  • Makra są zawsze definiowane wielkimi literami, aby ułatwić programistom identyfikację wszystkich makr w programie podczas czytania.
  • Makro nigdy nie może być funkcją członkowską klasy ani nie może uzyskać dostępu do elementów danych żadnej klasy.
  • Funkcja makro ocenia argument za każdym razem, gdy pojawia się w jego definicji, co powoduje nieoczekiwany wynik.
  • Makro musi mieć mniejszy rozmiar, ponieważ większe makra niepotrzebnie zwiększą rozmiar kodu.

Kluczowe różnice między Inline i Macro

  1. Podstawowa różnica między wersją i makrem polega na tym, że funkcje inline są analizowane przez kompilator, podczas gdy makra w programie są rozszerzane przez preprocesor.
  2. Słowo kluczowe użyte do zdefiniowania funkcji inline jest " inline ", natomiast słowo kluczowe użyte do zdefiniowania makra to " #define ".
  3. Gdy funkcja inline jest deaktywowana wewnątrz klasy, może być zdefiniowana w klasie lub poza klasą. Z drugiej strony makro jest zawsze definiowane na początku programu.
  4. Argument przekazywany do funkcji inline jest oceniany tylko raz podczas kompilacji, podczas gdy argumenty makr są oceniane za każdym razem, gdy w kodzie używane jest makro.
  5. Kompilator nie może wstawiać i rozszerzać wszystkich funkcji zdefiniowanych w klasie. Z drugiej strony makra są zawsze rozbudowywane.
  6. Krótka funkcja zdefiniowana w klasie bez wbudowanego słowa kluczowego jest automatycznie tworzona w funkcji inline. Z drugiej strony, Makro powinno być zdefiniowane konkretnie.
  7. Funkcja wbudowana może uzyskać dostęp do elementów klasy, podczas gdy makro nigdy nie może uzyskać dostępu do elementów klasy.
  8. Aby zakończyć funkcję inline, wymagany jest zamknięty nawias klamrowy, podczas gdy makro kończy się wraz z początkiem nowego wiersza.
  9. Debugowanie staje się łatwe dla funkcji inlne, ponieważ podczas kompilacji jest sprawdzane, czy nie ma błędów. Z drugiej strony makro nie jest sprawdzane podczas kompilacji, więc debugowanie makra staje się trudne.
  10. Będąc funkcją, funkcja inline wiąże swoje elementy w nawiasach startowych i zamkniętych. Z drugiej strony makro nie ma żadnego symbolu zakończenia, więc powiązanie staje się trudne, gdy makro zawiera więcej niż jedną instrukcję.

Wnioski:

Funkcje inline są znacznie bardziej przekonujące niż funkcja makro. C ++ zapewnia również lepszy sposób definiowania stałej, która używa słowa kluczowego "const".

Top