Macros/de
From Free Pascal wiki
Jump to navigationJump to search
Zurück zur Verwendung von Bedingungen, Nachrichten und Makros.
Makros sind den Symbolen und den Compile-Time Variablen ähnlich, der Unterschied zu den Symbolen besteht darin, dass Makros einen Rückgabewert haben.
Symbole kennen nur den Wert definiert oder nicht definiert.
Der Schalter für die Compilerdirektive kennt zwei Einstellungen ON und OFF.
Die Standardeinstellung ist OFF.
Beispiel (damit können Makros verwendet werden):
{$MACRO ON}
Es gibt zwei Arten von Makros: vordefinerte und selbstdefinierte Makros.
vordefinierte Makros
Symbol | Beschreibung |
---|---|
FPC_FULLVERSION | Enthält die vollständige Versionsnummer als Ganzzahl. Für FPC 2.6.0 ist der Wert 20600. |
FPC_VERSION | Enthält die vollständige Versionsnummer als Ganzzahl. Für FPC 2.6.0 ist der Wert 20600. |
FPC_RELEASE | Enthält die Unterversionsnummer (Releasenummer) von FPC. |
FPC_PATCH | Enthält die Revisionsnummer (Patchnummer) von FPC. |
selbstdefinierte Makros
Beispiel 1:
{$MACRO ON} // Erlaubt die Verwendung von Makros
{$define A := 3} // definiert ein Symbol und weist ihm einen Wert zu
{$define B := 4} // definiert ein Symbol und weist ihm einen Wert zu
{$define Sum := A + B} // definiert ein Makro
if Sum = 7 then // fragt den Inhalt des Makros ab
...
else
...;
Beispiel 2 ergibt das gleiche Ergebnis wie Beispiel 1:
{$MACRO ON} // Erlaubt die Verwendung von Makros
{$define Sum := A + B} // definiert ein Makro
{$define A := 3} // definiert ein Symbol und weist ihm einen Wert zu
{$define B := 4} // definiert ein Symbol und weist ihm einen Wert zu
if Sum = 7 then // fragt den Inhalt des Makros ab
...
else
...;
Beispiel 3 führt zu einem Fehler, da ein Symbol nicht mehr definert ist:
{$MACRO ON}
{$define Sum := A + B} // definiert ein Makro
{$define A := 3} // definiert ein Symbol und weist ihm einen Wert zu
{$define B := 4} // definiert ein Symbol und weist ihm einen Wert zu
{$undef A} // hebt die Definition des Symbols A auf
if Sum = 7 then // führt zu einem Fehler, da das Symbol A an dieser Stelle nicht mehr existiert
...
else
...;
--Olaf 08:17, 20 February 2013 (UTC)