Empfehlungen zum Auswählen zwischen Funktionen und Makros

Die meisten Microsoft-Laufzeitbibliotheks routinen oder assemblierte Funktionen kompiliert, aber einige Routinen werden als Makros implementiert.Wenn eine Headerdatei eine Funktion und eine Version einer Routine Makro deklariert, hat die Makrodefinition Vorrang, da sie immer in der Funktionsdeklaration steht.Wenn Sie eine Routine aufrufen, die als Funktion und Makro implementiert wird, können Sie den Compiler erzwingen, dass die Funktion Version auf zwei Arten verwenden:

  • Schließen Sie den Namen der Routine in Klammern ein.

    #include <ctype.h>
    a = _toupper(a);    // Use macro version of toupper.
    a = (_toupper)(a);  // Force compiler to use 
                        // function version of toupper.
    
  • „Heben Sie“ Makrodefinition mit den #undef-Direktive Definition auf:

    #include <ctype.h>
    #undef _toupper
    

Wenn Sie zwischen einer Funktion und eine Implementierung einer Bibliothek routine Makro auswählen müssen, sollten Sie die folgenden Kompromisse:

  • Größe und Geschwindigkeit der Hauptvorteil der Verwendung von Makros ist eine schnellere Ausführung.Während des Präprozessorlaufs wird ein Makro ersetzt (durch ihre Definition) " inline " erweitert, wenn es verwendet wird.Eine Funktionsdefinition tritt nur einmal unabhängig davon, wieoft sie aufgerufen wird.Makros können jedoch erhöhen Codegröße verfügen nicht über den Mehraufwand, der mit Funktionsaufrufen zugeordnet ist.

  • FunktionDie Funktionsauswertung A wird als Adresse aus. ein Makro jedoch nicht.So können Sie einen Makronamen nicht in Kontexten verwendet werden, die einen Zeiger benötigt wird.Sie können beispielsweise einen Zeiger auf eine Funktion, jedoch keinen Zeiger auf ein Makro deklarieren.

  • Typüberprüfung , wenn Sie eine Funktion deklariert, der Compiler kann die Argumenttypen überprüfen.Da Sie ein Makro nicht deklariert werden können, argumenttypen Makro kann der Compiler nicht überprüfen. obwohl die Anzahl von Argumenten überprüfen kann, übergeben Sie ein Makro.

Siehe auch

Referenz

CRT-Bibliotheks-Funktionen