Untersuchen wir anhand einer Vergleichstabelle den Unterschied zwischen Inline und Makro.
Vergleichstabelle
Vergleichsgrundlage | In der Reihe | Makro |
---|---|---|
Basic | Inline-Funktionen werden vom Compiler analysiert. | Makros werden vom Präprozessor erweitert. |
Syntax | inline return_type funct_name (parameter) {. . . } | #define macro_name char_sequence |
Verwendete Schlüsselwörter | in der Reihe | #definieren |
Definiert | Es kann innerhalb oder außerhalb der Klasse definiert werden. | Sie wird immer zu Beginn des Programms definiert. |
Auswertung | Es wertet das Argument nur einmal aus. | Es wertet das Argument jedes Mal aus, wenn es im Code verwendet wird. |
Erweiterung | Der Compiler kann nicht alle Funktionen integrieren und erweitern. | Makros werden immer erweitert. |
Automatisierung | Die in der Klasse definierten kurzen Funktionen werden automatisch zu Inline-Funktionen gemacht. | Makros sollten spezifisch definiert werden. |
Zugriff auf | Eine Inline-Member-Funktion kann auf die Daten-Member der Klasse zugreifen. | Makros können niemals Mitglieder der Klasse sein und nicht auf die Datenmitglieder der Klasse zugreifen. |
Beendigung | Die Definition der Inline-Funktion endet mit den geschweiften Klammern am Ende der Inline-Funktion. | Die Definition des Makros endet mit der neuen Zeile. |
Debugging | Das Debugging ist für eine Inline-Funktion einfach, da die Fehlerprüfung beim Kompilieren durchgeführt wird. | Das Debuggen wird für Makros schwierig, da während der Kompilierung keine Fehlerprüfung erfolgt. |
Bindung | Eine Inline-Funktion bindet alle Aussagen im Rumpf der Funktion sehr gut, wobei der Rumpf der Funktion mit den geschweiften Klammern beginnt und endet. | Ein Makro steht vor dem Bindungsproblem, wenn es mehr als eine Anweisung hat, da es kein Beendigungssymbol hat. |
Definition von Inline
Eine Inline-Funktion sieht wie eine reguläre Funktion aus, der jedoch das Schlüsselwort „ Inline “ vorangestellt ist. Inline-Funktionen sind Funktionen mit kurzer Länge, die an der Stelle ihres Aufrufs erweitert werden, anstatt aufgerufen zu werden. Lassen Sie uns Inline-Funktionen anhand eines Beispiels verstehen.
#include using namespace std; Klassenbeispiel {int a, b; public: inline void initialize (int x, int y) {a = x; b = y} void display () {cout << a << "" <In obigem Programm habe ich die Funktion initialization () 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 () ist nicht inline deklariert, kann aber vom Compiler als inline betrachtet werden In C ++ werden die in der Klasse definierten Funktionen vom Compiler automatisch inline erstellt, wobei die Länge der Funktion berücksichtigt wird.
- Die Inline-Funktion reduziert den Aufwand für das Aufrufen und Zurückkehren von Funktionen, wodurch wiederum die Ausführungszeit des Programms reduziert wird. Außerdem werden die Argumente auf den Stack verschoben und die Register werden gespeichert, wenn eine Funktion aufgerufen wird, und sie werden zurückgesetzt, wenn die Funktion zurückkehrt. Dies ist eine Zeit, die von den Inline-Funktionen vermieden wird, da nicht jedes Mal lokale Variablen und Formalparameter erstellt werden müssen .
- Inline-Funktionen können Mitglied der Klasse sein und auch auf das Datenmitglied der Klasse zugreifen.
- Die Inline-Funktion reduziert die Ausführungszeit des Programms, aber manchmal, wenn die Länge der Inline-Funktion größer ist, erhöht sich auch die Größe des Programms aufgrund des duplizierten Codes. Daher ist es eine gute Praxis, sehr kleine Funktionen zu integrieren.
- Das Argument der Inline-Funktion wird nur einmal ausgewertet.
Definition von Makro
Makro ist eine "Präprozessor-Direktive". Vor der Kompilierung wird das Programm vom Präprozessor geprüft. Wo immer es das Makro im Programm findet, ersetzt es dieses Makro durch seine Definition. Daher wird das Makro als "Textersetzung" betrachtet. Lassen Sie uns das Makro anhand eines Beispiels studieren.
#include #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Größer von 10 und 20 ist" << GREATER ("20", "10") << "\ n"; 0 zurückgeben; }
Im obigen Code habe ich eine Makrofunktion GREATER () deklariert, die die größere Anzahl der beiden Parameter vergleicht und findet. Sie können feststellen, dass es kein Semikolon gibt, um das Makro zu beenden, da das Makro nur durch die neue Zeile abgeschlossen wird. Da ein Makro nur eine Textersetzung ist, wird der Code des Makros dort erweitert, wo er aufgerufen wird.
- Die Makros werden immer in Großbuchstaben definiert, damit der Programmierer beim Lesen alle Makros im Programm erkennen kann.
- Das Makro kann niemals eine Member-Funktion einer Klasse sein oder auf die Daten-Member 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.
Hauptunterschiede zwischen Inline und Makro
- Der grundlegende Unterschied zwischen Inline und Makro besteht darin, dass Inline-Funktionen vom Compiler analysiert werden, wohingegen die Makros in einem Programm durch den Präprozessor erweitert werden.
- Das Schlüsselwort zum Definieren einer Inline-Funktion ist „ Inline “, während das Schlüsselwort zum Definieren eines Makros „ #define “ ist.
- Wenn die Inline-Funktion innerhalb einer Klasse dekaliert ist, kann sie entweder innerhalb einer Klasse oder außerhalb einer Klasse definiert werden. Andererseits wird ein Makro immer zu Beginn des Programms definiert.
- Das an die Inline-Funktionen übergebene Argument wird während der Kompilierung nur einmal ausgewertet, während das Makro-Argument jedes Mal ausgewertet wird, wenn ein Makro im Code verwendet wird.
- Der Compiler kann nicht alle in einer Klasse definierten Funktionen integrieren und erweitern. Auf der anderen Seite werden Makros immer erweitert.
- Die Kurzfunktionen, die innerhalb einer Klasse ohne Inline-Schlüsselwort definiert werden, werden automatisch zu Inline-Funktionen gemacht. Auf der anderen Seite sollte Makro spezifisch definiert werden.
- Eine Funktion, die inline ist, kann auf die Member der Klasse zugreifen, während ein Makro niemals auf die Member der Klasse zugreifen kann.
- Um eine Inline-Funktion zu beenden, ist eine geschlossene geschweifte Klammer erforderlich, während ein Makro mit dem Beginn einer neuen Zeile beendet wird.
- Das Debuggen wird für die Inlne-Funktion einfach, da während des Kompilierens auf Fehler geprüft wird. Auf der anderen Seite wird ein Makro beim Kompilieren nicht geprüft, sodass das Debuggen eines Makros schwierig wird.
- Eine Inline-Funktion bindet ihre Mitglieder als Anfang und schließt geschweifte Klammern. Andererseits haben Makros kein Beendigungssymbol, sodass die Bindung schwierig wird, wenn das Makro mehr als eine Anweisung enthält.
Schlussfolgerungen:
Die Inline-Funktionen sind weitaus überzeugender als Makrofunktionen. C ++ bietet auch eine bessere Möglichkeit, eine Konstante zu definieren, die ein Schlüsselwort "const" verwendet.