Teilen über


Makros (C/C++)

Der Präprozessor erweitert Makros in allen Zeilen mit Ausnahme von Präprozessordirektiven, Zeilen mit # dem ersten Nicht-Leerzeichen. Sie erweitert Makros in Teilen einiger Direktiven, die nicht als Teil einer bedingten Kompilierung übersprungen werden. Mit bedingten Kompilierungsdirektiven können Sie die Kompilierung von Teilen einer Quelldatei unterdrücken. Sie testen einen konstanten Ausdruck oder bezeichner, um zu bestimmen, welche Textblöcke an den Compiler übergeben werden sollen und welche aus der Quelldatei während der Vorverarbeitung entfernt werden sollen.

Die #define-Direktive wird normalerweise verwendet, um aussagekräftige Bezeichner Konstanten, Schlüsselwörtern und häufig verwendeten Anweisungen oder Ausdrücken zuzuordnen. Bezeichner, die Konstanten darstellen, werden manchmal als symbolische Konstanten oder Manifestkonstanten bezeichnet. Bezeichner, die Anweisungen oder Ausdrücke darstellen, werden als Makros bezeichnet. In dieser Präprozessordokumentation wird nur der Begriff "Makro" verwendet.

Wenn der Name eines Makros im Programmquelltext oder in den Argumenten bestimmter anderer Präprozessorbefehle erkannt wird, wird es als Aufruf dieses Makros behandelt. Der Makroname wird durch eine Kopie des Makrotexts ersetzt. Wenn das Makro Argumente akzeptiert, werden die tatsächlichen Argumente nach dem Makronamen durch formale Parameter im Makrotext ersetzt. Der Vorgang zum Ersetzen eines Makroaufrufs durch die verarbeitete Kopie des Textkörpers wird als Erweiterung des Makroaufrufs bezeichnet.

Praktisch gibt es zwei Arten von Makros. Objektähnliche Makros verwenden keine Argumente. Funktionsähnliche Makros können definiert werden, um Argumente zu akzeptieren, sodass sie wie Funktionsaufrufe aussehen und funktionieren. Da Makros keine tatsächlichen Funktionsaufrufe generieren, können Programme manchmal schneller ausgeführt werden, indem Sie Funktionsaufrufe durch Makros ersetzen. (In C++ sind Inlinefunktionen häufig eine bevorzugte Methode.) Makros können jedoch Probleme verursachen, wenn Sie sie nicht definieren und mit Bedacht verwenden. Möglicherweise müssen Sie Klammern bei Makrodefinitionen mit Argumenten verwenden, um die gewünschte Rangfolge in einem Ausdruck zu erhalten. Makros behandeln außerdem Ausdrücke mit Nebeneffekte möglicherweise nicht ordnungsgemäß. Weitere Informationen finden Sie im Beispiel in der getrandom #define-Direktive.

Nachdem Sie ein Makro definiert haben, können Sie es nicht in einen anderen Wert neu definieren, ohne zuerst die ursprüngliche Definition zu entfernen. Sie können jedoch das Makro mit genau derselben Definition neu definieren. Die gleiche Definition kann also mehrmals in einem Programm erscheinen.

Die #undef Direktive entfernt die Definition eines Makros. Nachdem Sie die Definition entfernt haben, können Sie das Makro in einen anderen Wert neu definieren. Die #define Richtlinie und die #undef Richtlinie erörtern die bzw#undef. die #define Richtlinien.

Weitere Informationen finden Sie unter

Siehe auch

C/C++-Präprozessorreferenz