In diesem Abschnitt werden wir den Unterschied zwischen Makros und Funktionen in der C-Sprache sehen. Makros werden vorverarbeitet, was bedeutet, dass alle Makros zur Kompilierzeit vorverarbeitet werden. Funktionen werden nicht vorverarbeitet, sondern kompiliert.
In Makros wird keine Typprüfung durchgeführt, daher können Probleme mit unterschiedlichen Eingabetypen auftreten. Bei Funktionen passiert das nicht. Darüber hinaus kann es zu ungültigen Ergebnissen kommen, wenn die Eingabe des Makros nicht korrekt verwaltet wird. Bei Fragen lesen Sie sich bitte das folgende Verfahren durch.
#include <stdio.h> #define SQUARE(x) x * x int sqr(int x) { return x*x; } main() { printf("Use of sqr(). The value of sqr(3+2): %d</p><p>", sqr(3+2)); printf("Use of SQUARE(). The value of SQUARE(3+2): %d", SQUARE(3+2)); }
Use of sqr(). The value of sqr(3+2): 25 Use of SQUARE(). The value of SQUARE(3+2): 11
Funktion und Makro, wir möchten, dass beide die gleiche Aufgabe ausführen, aber hier können wir sehen, dass die Ausgabeergebnisse unterschiedlich sind. Der Hauptgrund ist, dass, wenn wir 3 + 2 als Funktionsparameter übergeben, dieser in 5 umgewandelt wird und dann 5 * 5 = 25 berechnet wird. Für das Makro wird 3 + 2 * 3 + 2 = 3 + 6 + 2 = 11 ausgeführt.
Daher werden Makros für die folgenden Probleme nicht empfohlen:
Keine Typprüfung
Standardmäßig der Debug-Modus, da Makros lediglich Ersetzungen sind
Makros haben keinen Namensraum. Wenn also ein Makro in einem Abschnitt definiert ist, kann es in einem anderen Abschnitt verwendet werden.
Das Makro erhöht die Codelänge, da es vor der Vorverarbeitung hinzugefügt wird.
Makros prüfen nicht auf Fehler bei der Kompilierung.
Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen Makros und Funktionen in C. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!