Różnica między wierszem a makrem w C ++

Autor: Laura McKinney
Data Utworzenia: 2 Kwiecień 2021
Data Aktualizacji: 7 Móc 2024
Anonim
Różnica między wierszem a makrem w C ++ - Technologia
Różnica między wierszem a makrem w C ++ - Technologia

Zawartość


Makro to instrukcja, która rozwija się w momencie jej wywołania. Można również zdefiniować funkcje, takie jak makra. Podobnie funkcje wbudowane rozszerzają się również w momencie wywołania. Jedną podstawową różnicą między funkcją inline i funkcją makro jest to, że funkcje wbudowane są rozszerzane podczas kompilacjai makra są rozszerzane, gdy program jest przetwarzany przez preprocesor.

Przeanalizujmy różnicę między wstawką a makrem za pomocą tabeli porównawczej.

  1. Wykres porównania
  2. Definicja
  3. Kluczowe różnice
  4. Wniosek

Wykres porównania

Podstawa do porównaniaInlineMakro
Podstawowy Funkcje wbudowane są analizowane przez kompilator.Makra są rozszerzane przez preprocesor.
Składniainline typ_powrotu nazwa_funkcji (parametry) {. . . }# zdefiniować nazwę_ Makra ciąg_nazwy
Użyte słowa kluczoweinline
#definiować
ZdefiniowaneMożna go zdefiniować wewnątrz lub na zewnątrz klasy.Jest zawsze definiowany na początku programu.
OcenaArgument ocenia tylko raz.Ocenia argument za każdym razem, gdy jest używany w kodzie.
Ekspansja Kompilator może nie wstawiać i rozszerzać wszystkich funkcji.Makra są zawsze rozwijane.
AutomatyzacjaKrótkie funkcje zdefiniowane w klasie są automatycznie przekształcane w funkcje wbudowane.Makra powinny być zdefiniowane konkretnie.
DostępFunkcja elementu wbudowanego może uzyskiwać dostęp do elementów danych klasy.Makra nigdy nie mogą być członkami klasy i nie mogą uzyskiwać dostępu do członków danych klasy.
ZakończenieDefinicja funkcji inline kończy się nawiasami klamrowymi na końcu funkcji inline.Definicja makra kończy się nową linią.
DebugowanieDebugowanie jest łatwe dla funkcji wbudowanej, 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 wbudowana bardzo dobrze wiąże wszystkie instrukcje w treści funkcji, a treść funkcji zaczyna się i kończy nawiasami klamrowymi.Makro napotyka problem wiązania, jeśli ma więcej niż jedną instrukcję, ponieważ nie ma symbolu zakończenia.


Definicja Inline

Funkcja wbudowana wygląda jak zwykła funkcja, ale poprzedza ją słowo kluczowe „inline„. Funkcje wbudowane to funkcje krótkiej długości, które są rozszerzane w miejscu wywołania, zamiast być wywoływane. Przyjrzyjmy się funkcjom wbudowanym na przykładzie.

#zawierać 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ę initialize () jako funkcję wbudowaną w klasie „example”. Kod funkcji inicjalizacji () zostanie rozwinięty tam, gdzie zostanie wywołany przez obiekt klasy „przyklad”. Funkcja display () zdefiniowana w przykładzie klasy nie jest deklarowana jako wbudowana, ale może być uznana przez kompilator za wbudowaną, ponieważ w C ++ funkcje zdefiniowane w klasie są automatycznie wstawiane przez kompilator, biorąc pod uwagę długość funkcji.


  • Funkcja inline zmniejsza obciążenie wywołania i powrotu funkcji, co z kolei skraca czas wykonywania programu.Argumenty są również wypychane na stos, a rejestry są zapisywane, gdy funkcja jest wywoływana, i resetowane, gdy funkcja powraca, co zajmuje dużo czasu, unikają tego funkcje wbudowane, ponieważ nie ma potrzeby tworzenia zmiennych lokalnych i parametrów formalnych za każdym razem .
  • Funkcje wbudowane mogą być członkami klasy, a także mogą uzyskiwać dostęp do elementu danych klasy.
  • Funkcja Inline skraca czas wykonywania programu, ale czasami, jeśli długość funkcji Inline jest większa, rozmiar programu również wzrośnie z powodu powielonego kodu. Dlatego dobrą praktyką jest wstawianie bardzo małych funkcji.
  • Argument funkcji wbudowanej jest oceniany tylko raz.

Definicja makro

Makro jest „dyrektywą preprocesorów”. Przed kompilacją program jest sprawdzany przez preprocesora i gdziekolwiek znajdzie makro w programie, zastępuje to makro swoją definicją. Dlatego makro uważa się za „zamiennik”. Przeanalizujmy makro na przykładzie.

#zawierać # zdefiniować WIĘKSZE (a, b) ((a <b)? b: a) int main (void) {cout << „Większa z 10 i 20 to„ << WIĘKSZA („20”, „10”) << „ n”; zwraca 0; }

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

  • Makra są zawsze zdefiniowane dużymi literami, aby ułatwić programistom identyfikację wszystkich makr w programie podczas czytania.
  • Makro nigdy nie może być funkcją członka klasy ani nie może uzyskiwać dostępu do danych członków żadnej klasy.
  • Funkcja makra ocenia argument za każdym razem, gdy pojawia się w swojej definicji, co powoduje nieoczekiwany wynik.
  • Makro musi mieć mniejszy rozmiar, ponieważ większe makra niepotrzebnie zwiększą rozmiar kodu.
  1. Podstawową różnicą między inline i makro jest to, ż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 wbudowanej to „inline”, Natomiast słowo kluczowe użyte do zdefiniowania makra to„#definiować“.
  3. Gdy funkcja wstawiana jest dekalowana w klasie, można ją zdefiniować w klasie lub poza klasą. Z drugiej strony makro jest zawsze definiowane na początku programu.
  4. Argument przekazany do funkcji wbudowanych jest ewaluowany tylko raz podczas kompilacji, natomiast argument makra jest oceniany za każdym razem, gdy makro jest używane w kodzie.
  5. Kompilator może nie wstawiać i rozszerzać wszystkich funkcji zdefiniowanych w klasie. Z drugiej strony makra są zawsze rozwijane.
  6. Krótkie funkcje, które są zdefiniowane w klasie bez słowa kluczowego inline, są automatycznie tworzone jako funkcje inline. Z drugiej strony Makro powinno być zdefiniowane konkretnie.
  7. Funkcja wbudowana może uzyskać dostęp do członków klasy, podczas gdy makro nigdy nie może uzyskać dostępu do członków klasy.
  8. Aby zakończyć funkcję wstawiania, wymagany jest nawias klamrowy zamknięty, podczas gdy makro kończy się wraz z rozpoczęciem nowej linii.
  9. Debugowanie staje się łatwe dla funkcji inlne, ponieważ jest sprawdzane podczas kompilacji pod kątem 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 wbudowana wiąże swoje elementy w początkowych i zamkniętych nawiasach klamrowych. Z drugiej strony makro nie ma żadnego symbolu zakończenia, więc wiązanie staje się trudne, gdy makro zawiera więcej niż jedną instrukcję.

Wnioski:

Funkcje wbudowane są znacznie bardziej przekonujące niż funkcje makro. C ++ zapewnia także lepszy sposób definiowania stałej, która wykorzystuje słowo kluczowe „const”.