#undef
Nach oben zu Makros definieren und deren Definition aufheben - Index
Syntax
#undef makro_bezeichner
Beschreibung
Mit der Direktive #undef können Sie ein Makro außer Kraft setzen. Dabei wird eine vorher bestehende Verbindung zwischen Makrobezeichner und Symbolfolge aufgelöst. Die Makrodefinition wird praktisch "vergessen", und der Makrobezeichner ist dann undefiniert. Innerhalb einer #undef-Zeile findet keine Makroerweiterung statt.
Der Status "definiert" bzw. "undefiniert" stellt eine wichtige Eigenschaft eines Bezeichners dar, unabhängig von seiner tatsächlichen Definition. Mit den Bedingungsdirektiven #ifdef und #ifndef wird geprüft, ob ein Bezeichner momentan definiert ist oder nicht. Sie bieten damit einen flexiblen Mechanismus zur Steuerung vieler Aspekte der Compilierung.
Nachdem die Definition eines Makrobezeichners aufgehoben worden ist, kann er mit #define neu definiert werden, wobei man die frühere oder eine andere Symbolfolge verwenden kann.
Der Versuch, einen bereits definierten Makrobezeichner erneut zu definieren, führt zu einer Warnung, falls die neue Definition nicht exakt Symbol für Symbol der vorhandenen entspricht. Wenn Definitionen in anderen Header-Dateien vorkommen können, ist folgende Strategie empfehlenswert:
#ifndef BLOCK_SIZE #define BLOCK_SIZE 512 #endif
Die mittlere Zeile wird ignoriert, wenn BLOCK_SIZE
aktuell definiert ist. Ist BLOCK_SIZE
dagegen zur Zeit nicht definiert, so erfolgt die Definition in der mittleren Zeile.
Es ist kein Semikolon (;) erforderlich, um eine Präprozessor-Direktive abzuschließen. Jedes Zeichen in der Symbolfolge, einschließlich des Semikolons, taucht in der Makroerweiterung auf. Die Symbolfolge endet mit dem ersten Zeilenvorschubzeichen, dem kein Backslash vorangeht. Jede Folge von Whitespace-Zeichen, einschließlich von Kommentaren in der Symbolfolge, wird durch ein einziges Leerzeichen ersetzt.