Unterschied zwischen Inline und Makro in C ++

Autor: Laura McKinney
Erstelldatum: 2 April 2021
Aktualisierungsdatum: 15 Kann 2024
Anonim
What is difference between Macro and Function
Video: What is difference between Macro and Function

Inhalt


Makro ist eine Anweisung, die zum Zeitpunkt ihres Aufrufs erweitert wird. Es können auch Funktionen wie Makros definiert werden. In ähnlicher Weise werden die Inline-Funktionen auch zum Zeitpunkt ihres Aufrufs erweitert. Ein Hauptunterschied zwischen Inline- und Makrofunktion besteht darin, dass Inline-Funktionen werden während erweitert Zusammenstellung, und das Makros werden erweitert, wenn das Programm von der verarbeitet wird Präprozessor.

Lassen Sie uns den Unterschied zwischen Inline und Makro mit Hilfe der Vergleichstabelle untersuchen.

  1. Vergleichstabelle
  2. Definition
  3. Hauptunterschiede
  4. Fazit

Vergleichstabelle

Grundlage für den VergleichIn der ReiheMakro
Basic Inline-Funktionen werden vom Compiler analysiert.Makros werden vom Präprozessor erweitert.
SyntaxInline-Rückgabetyp Funktionsname (Parameter) {. . . }#define macro_name char_sequence
Verwendete Schlüsselwörterin der Reihe
#definieren
DefiniertEs kann innerhalb oder außerhalb der Klasse definiert werden.Sie wird immer zu Beginn des Programms definiert.
AuswertungDas Argument wird nur einmal ausgewertet.Es wertet das Argument jedes Mal aus, wenn es im Code verwendet wird.
Erweiterung Der Compiler integriert und erweitert möglicherweise nicht alle Funktionen.Makros werden immer erweitert.
AutomatisierungDie in der Klasse definierten Kurzfunktionen werden automatisch in Inline-Funktionen umgewandelt.Makros sollten speziell definiert werden.
ZugreifenEine Inline-Member-Funktion kann auf die Datenmember der Klasse zugreifen.Makros können niemals die Mitglieder der Klasse sein und können nicht auf die Datenmitglieder der Klasse zugreifen.
BeendigungDie Definition der Inline-Funktion endet mit den geschweiften Klammern am Ende der Inline-Funktion.Die Definition des Makros endet mit der neuen Zeile.
DebuggenDas Debuggen ist für eine Inline-Funktion einfach, da die Fehlerprüfung während der Kompilierung durchgeführt wird.Das Debuggen wird für Makros schwierig, da während der Kompilierung keine Fehlerprüfung stattfindet.
BindungEine Inline-Funktion bindet alle Anweisungen im Hauptteil der Funktion sehr gut und der Hauptteil der Funktion beginnt und endet mit den geschweiften Klammern.Ein Makro hat das Bindungsproblem, wenn es mehr als eine Anweisung hat, da es kein Beendigungssymbol hat.


Definition von Inline

Eine Inline-Funktion sieht aus wie eine normale Funktion, aber vor dem Schlüsselwort „in der Reihe“. Inline-Funktionen sind Funktionen mit kurzer Länge, die beim Aufruf erweitert werden, anstatt aufgerufen zu werden. Lassen Sie uns die Inline-Funktionen anhand eines Beispiels verstehen.

#umfassen using namespace std; Klassenbeispiel {int a, b; public: inline void initialize (int x, int y) {a = x; b = y} void display () {cout << a << "" <

Im obigen Programm habe ich die Funktion initialize () als Inline-Funktion in der Klasse "example" deklariert und definiert. Der Code der Funktion initialization () wird dort erweitert, wo er vom Objekt der Klasse "example" aufgerufen wird. Die im Klassenbeispiel definierte Funktion display () wird nicht als inline deklariert, kann aber vom Compiler als inline betrachtet werden In C ++ werden die innerhalb der Klasse definierten Funktionen vom Compiler automatisch inline gesetzt, wobei die Länge der Funktion berücksichtigt wird.


  • Die Inline-Funktion reduziert den Aufwand für das Aufrufen und Zurückgeben von Funktionen, was wiederum die Ausführungszeit des Programms verkürzt.Außerdem werden die Argumente auf den Stack gepusht und die Register beim Aufruf einer Funktion gespeichert und beim Rücksprung der Funktion zurückgesetzt. Dies wird durch die Inline-Funktionen vermieden, da nicht jedes Mal lokale Variablen und formale Parameter erstellt werden müssen .
  • Inline-Funktionen können ein Mitglied der Klasse sein und auch auf das Datenmitglied der Klasse zugreifen.
  • Inline-Funktion verkürzt die Ausführungszeit des Programms, aber manchmal, wenn die Länge der Inline-Funktion größer ist, nimmt auch die Größe des Programms aufgrund des duplizierten Codes zu. Daher ist es eine gute Praxis, sehr kleine Funktionen zu integrieren.
  • Das Argument der Inline-Funktion wird nur einmal ausgewertet.

Definition von Makro

Macro ist eine "Präprozessor-Direktive". Vor dem Kompilieren wird das Programm vom Präprozessor überprüft und ersetzt das Makro durch seine Definition, wo immer es das Makro im Programm findet. Daher wird das Makro als "Ersatz" betrachtet. Betrachten wir das Makro anhand eines Beispiels.

#umfassen #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Größer als 10 und 20 ist" << GREATER ("20", "10") << " n"; return 0; }

Im obigen Code habe ich eine Makrofunktion GREATER () deklariert, die die größere Anzahl beider Parameter vergleicht und findet. Sie können beobachten, dass es kein Semikolon zum Beenden des Makros gibt, da das Makro nur durch die neue Zeile beendet wird. Da ein Makro nur ein Ersatz ist, wird der Code des Makros, in dem es aufgerufen wird, erweitert.

  • Die Makros werden immer in Großbuchstaben definiert, damit die Programmierer beim Lesen alle Makros im Programm leichter identifizieren können.
  • Das Makro kann niemals die Mitgliedsfunktion einer Klasse sein oder auf die Datenmember einer Klasse zugreifen.
  • Die Makrofunktion wertet das Argument jedes Mal aus, wenn es in seiner Definition erscheint, was zu einem unerwarteten Ergebnis führt.
  • Das Makro muss kleiner sein, da die größeren Makros den Code unnötig vergrößern.
  1. Der grundlegende Unterschied zwischen Inline- und Makrofunktionen besteht darin, dass Inline-Funktionen vom Compiler analysiert werden, wohingegen die Makros in einem Programm vom Präprozessor erweitert werden.
  2. Das Schlüsselwort zum Definieren einer Inline-Funktion lautet „in der Reihe”Während das Schlüsselwort zum Definieren eines Makros lautet“#definieren“.
  3. Sobald die Inline-Funktion innerhalb einer Klasse deklariert ist, kann sie entweder innerhalb oder außerhalb einer Klasse definiert werden. Ein Makro wird dagegen immer zu Beginn des Programms definiert.
  4. Das an die Inline-Funktionen übergebene Argument wird beim Kompilieren nur einmal ausgewertet, wohingegen das Makroargument jedes Mal ausgewertet wird, wenn ein Makro im Code verwendet wird.
  5. Der Compiler integriert und erweitert möglicherweise nicht alle Funktionen, die in einer Klasse definiert sind. Auf der anderen Seite werden Makros immer erweitert.
  6. Die Kurzfunktionen, die innerhalb einer Klasse ohne Inline-Schlüsselwort definiert sind, werden automatisch zu Inline-Funktionen. Auf der anderen Seite sollte Macro spezifisch definiert werden.
  7. Eine inline Funktion kann auf die Mitglieder der Klasse zugreifen, während ein Makro niemals auf die Mitglieder der Klasse zugreifen kann.
  8. Zum Beenden einer Inline-Funktion ist eine geschlossene geschweifte Klammer erforderlich, während ein Makro mit dem Beginn einer neuen Zeile beendet wird.
  9. Das Debuggen wird für die inlne-Funktion einfach, da es während der Kompilierung auf Fehler überprüft wird. Auf der anderen Seite wird ein Makro beim Kompilieren nicht überprüft, so dass das Debuggen eines Makros schwierig wird.
  10. Eine Funktion zu sein, ist eine Inline-Funktion, die ihre Mitglieder innerhalb eines Anfangs und geschlossener geschweifter Klammern bindet. Auf der anderen Seite hat ein Makro kein Terminationssymbol, sodass die Bindung schwierig wird, wenn das Makro mehrere Anweisungen enthält.

Schlussfolgerungen:

Die Inline-Funktionen sind weitaus überzeugender als die Makrofunktion. C ++ bietet auch eine bessere Möglichkeit, eine Konstante zu definieren, die ein Schlüsselwort "const" verwendet.