compile time expressions/de

From Lazarus wiki

Deutsch (de)
Zurück zur Verwendung von Bedingungen, Nachrichten und Makros.

Von Turbo Pascal einmal abgesehen, verwendet der Free Pascal Compiler bei Compile Time Ausdrücken (Compile time Expressions) eine strenge Compilierung.
Zur Überprüfung von Compile Time Ausdrücken kann die Bedingung {$IF} verwendet werden.

Beispiel für den Aufbau einer Abfrage:

{$if expression = ...} // Auswerung des Ausdrucks (Expression) auf Wahr oder Falsch
  ...;                 // wenn die Abfrage Wahr (True) liefert, wird dieser Abschnitt compiliert
{$else}
  ...;                 // wenn die Abfrage Falsch (False) liefert, wird dieser Abschnitt compiliert
{$endif}


Der Inhalt eines Ausdrucks muss zum Zeitpunkt des Compilerlaufs vorhanden sein.
Folgende Konstrukte eignen sich dafür:

  • Konstanten (Zeichenketten (Strings, Zahlen)
  • Makros
  • Compile time Variablen (nur im MacPas Modus)
  • Compile time Ausdrücke (nur im MacPas Modus)


Bei der Auswertung eines Symbols wird das Symbol immer durch seinen Wert ersetzt.
Bei der Auswertung eines Ausdrucks sind folgende boolsche Operatoren erlaubt.
=, <>, <, >, <=, >=, AND, NOT, OR, IN Der Operator IN prüft, ob ein Wert in einem SET vorkommt.

Folgende Funktionen können verwendet werden:

TRUE Diese Funktion ist nur im MacPas Compiler Modus definiert und prüft auf True. In anderen Compiler Modi kann für True 1 verwendet werden.

{$if Test = True}

{$if Test = 1}
FALSE Diese Funktion ist nur im MacPas Compiler Modus definiert und prüft auf False. In anderen Compiler Modi kann 0 verwendet werden.

{$if Test = False}

{$if Test = 0}
DEFINED(...) Diese Funktion liefert TRUE zurück, wenn das Symbol definiert ist. Im MacPas Compiler Modus sind die Klammern optional.

Beispiel:
{$IF DEFINED(...)}
ist gleichbedeutend mit

{$IF DEFINED ...}
UNDEFINED ... Diese Funktion ist nur im MacPas Compiler Modus definiert. Die Funktion liefert TRUE zurück, wenn das Symbol nicht definiert ist und False wenn das Symbol definiert ist.

Beispiel:
{$IF DEFINED(...)}
ist gleichbedeutend mit

{$IF DEFINED ...}
OPTION(...) Diese Funktion ist nur im MacPas Compiler Modus definiert. Die Funktion ist gleichbedeutend mit der Direktive {$IFOPT}.
SIZEOF(...) Diese Funktion ermittelt die Grösse des Datentyps (Variable oder Konstante).
DECLARED(...) Ergibt True, wenn ein Symbol an dieser Stelle deklariert (gültig) ist bzw. False wenn es nicht definiert ist.


Bei der Auswertung von Ausdrücken gelten folgende Regeln:

  • Wenn alle Teile eines Ausdrucks bei ihrer Auswertung boolesche Werte (0 und 1 bzw. True und False) zurückgeben, dann verwendet die Auswertung Wahrheitswerte.
  • Wenn alle Teile eines Ausdrucks bei ihrer Auswertung numerische Werte zurückgeben, dann gibt der Ausdruck numerische Werte zurück.
  • In allen anderen Fällen, gibt der Ausdruck den Datentyp String zurück


Wenn der vollständige Auswertung des Ausdrucks '0' ergibt, dann ergibt das False und wird abgwiesen. Im anderen Fall ergibt die Auswertung True und wird akzeptiert. Das hat möglicherweise unerwarete Konsequenzen:
{$if 0} wird als False ausgewertet und abgelehnt, während {$if 00} als True ausgewertet wird.

--Olaf 10:09, 28 February 2013 (UTC)