webentwicklung-frage-antwort-db.com.de

Was ist der Unterschied zwischen einem Makro und einer Funktion in C?

Was ist der Unterschied zwischen einem Makro und einer Funktion inC? Bitte sagen Sie mir eine Anwendung, in der ich Makros und Funktionen verwenden kann.

18
user615929

Vorteile und Nachteile von Makros

Vorteile

  • Zeiteffizienz.
  • Argumente wie Funktion müssen nicht übergeben werden.
  • Es ist vorverarbeitet.
  • Einfacher zu lesen.

Nachteile

  • Sehr schwer zu debuggen in großem Code.
  • Nehmen Sie mehr Speicherplatz im Stack-Vergleich zur Funktion Angenommen, im Programm gibt es ein Makro, das 50-mal verwendet wurde. Dies bedeutet, dass der Speicher 50-mal belegt wird. Wenn jedoch eine Funktion 50-mal aufgerufen wird, wird jedes Mal ein einzelner Speicher benötigt, da jedes Mal dieser Speicher freigegeben wird
22
Varun Chhangani

Der grundlegende Unterschied besteht darin, dass die Funktion kompiliert und das Makro vorverarbeitet wird. Wenn Sie einen Funktionsaufruf verwenden, wird er mit all diesen Stack-Operationen in ASM CALL übersetzt, um Parameter zu übergeben und Werte zurückzugeben. Wenn Sie einen MACRO verwenden, übersetzt der C-Präprozessor alle Zeichenfolgen mit Makro und dann mit Compile.

Die Verwendung von Makros hat den Nachteil, dass sie die Implementierung ausblenden. Es ist schwieriger, einen Fehler zu finden, wenn er einen hat.

19

In C (und C++) ist ein Makro eine Präprozessoranweisung. Das heißt, bevor Ihr Programm mit dem Kompilieren beginnt, werden alle Ihre Makros durchlaufen und verarbeitet. Makros sind nützlich, weil

  • Sie können Ihr Programm leichter lesbar machen
  • Sie können die Effizienz verbessern (da sie zur Kompilierzeit berechnet werden können)
  • Sie können lange oder komplizierte Ausdrücke verkürzen, die häufig verwendet werden. Zum Beispiel verwenden wir ein Makro, um den aktuellen log4cpp-Logger abzurufen, und ein paar andere, um ihn mit verschiedenen Ebenen zu schreiben.

Enttäuschungen

  • Erweitern Sie die Größe Ihrer ausführbaren Datei
  • Kann Ihren Namensraum überfluten, wenn Sie nicht aufpassen. Wenn Sie beispielsweise zu viele Präprozessor-Makros verwenden, können Sie versehentlich deren Namen in Ihrem Code verwenden, was beim Debuggen sehr verwirrend sein kann.

Beispiel

#define INCREMENT(x) x++

Eine Funktion ist ein Code, der relativ unabhängig ausgeführt werden kann und eine bestimmte Aufgabe ausführt. Sie können sich so etwas wie eine mathematische Funktion vorstellen: Eine Funktion, die eine Menge von Eingaben enthält, liefert eine bestimmte Ausgabe. In C sind diese als definiert

<return type> <name>(<parameters>)
{
  //code body
}
11
Jim Jeffries

Ein weiterer Unterschied besteht darin, dass es in der Funktion Stack-Overhead gibt, bei Makros jedoch keinen Stack-Overhead. Es ist nur die Erweiterung des Codes.

1
Ariful Hoque

Sie müssen das Makro nur als Textersetzung betrachten: Es ist, als würden Sie den Makrocode jedes Mal einbetten, wenn Sie das Makro in Ihrem Code sehen. Dies ist gut für "Codeausschnitte", da Sie den Aufruf von Overhead-Funktionen vermeiden, da jedes Mal, wenn Sie eine Funktion aufrufen, einige Anstrengungen unternommen werden, um Parameter auf den Stack zu verschieben.

0
Felice Pollano