Sign in Join
Wiki copytemporary

compile time expressions/de: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11│ **Deutsch (de)** │
22****
33
44Zurück zur [[using conditionals messages macros/de|Verwendung von Bedingungen, Nachrichten und Makros]].
55
66Von Turbo Pascal einmal abgesehen, verwendet der Free Pascal Compiler bei Compile Time Ausdrücken (Compile time Expressions) eine strenge Compilierung.
77Zur Überprüfung von Compile Time Ausdrücken kann die Bedingung {$IF} verwendet werden.
88
99Beispiel für den Aufbau einer Abfrage:
1010```
1111{$if expression = ...} // Auswerung des Ausdrucks (Expression) auf Wahr oder Falsch
1212 ...; // wenn die Abfrage Wahr (True) liefert, wird dieser Abschnitt compiliert
1313 {$else}
1414 ...; // wenn die Abfrage Falsch (False) liefert, wird dieser Abschnitt compiliert
1515 {$endif}
1616```
1717
1818
1919Der Inhalt eines Ausdrucks muss zum Zeitpunkt des Compilerlaufs vorhanden sein.
2020Folgende Konstrukte eignen sich dafür:
2121
2222 * Konstanten (Zeichenketten (Strings, Zahlen)
2323 * Makros
2424 * Compile time Variablen (nur im MacPas Modus)
2525 * Compile time Ausdrücke (nur im MacPas Modus)
2626
2727
2828Bei der Auswertung eines Symbols wird das Symbol immer durch seinen Wert ersetzt.
2929Bei der Auswertung eines Ausdrucks sind folgende boolsche Operatoren erlaubt.
3030=, <>, <, >, <=, >=, AND, NOT, OR, IN Der Operator IN prüft, ob ein Wert in einem [[Set/de|SET]] vorkommt.
3131
3232Folgende Funktionen können verwendet werden:
3333
3434TRUE | 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.
3535{$if Test = True}
3636{$if Test = 1}
3737---|---
3838FALSE | Diese Funktion ist nur im MacPas Compiler Modus definiert und prüft auf False. In anderen Compiler Modi kann 0 verwendet werden.
3939{$if Test = False}
4040{$if Test = 0}
4141DEFINED(...) | Diese Funktion liefert TRUE zurück, wenn das Symbol definiert ist. Im MacPas Compiler Modus sind die Klammern optional.
4242Beispiel:
4343{$IF DEFINED(...)}
4444ist gleichbedeutend mit
4545{$IF DEFINED ...}
4646UNDEFINED ... | 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.
4747Beispiel:
4848{$IF DEFINED(...)}
4949ist gleichbedeutend mit
5050{$IF DEFINED ...}
5151OPTION(...) | Diese Funktion ist nur im MacPas Compiler Modus definiert. Die Funktion ist gleichbedeutend mit der Direktive {$IFOPT}.
5252SIZEOF(...) | Diese Funktion ermittelt die Grösse des Datentyps (Variable oder Konstante).
5353DECLARED(...) | Ergibt True, wenn ein Symbol an dieser Stelle deklariert (gültig) ist bzw. False wenn es nicht definiert ist.
5454
5555
5656Bei der Auswertung von Ausdrücken gelten folgende Regeln:
5757
5858 * Wenn alle Teile eines Ausdrucks bei ihrer Auswertung boolesche Werte (0 und 1 bzw. True und False) zurückgeben, dann verwendet die Auswertung Wahrheitswerte.
5959 * Wenn alle Teile eines Ausdrucks bei ihrer Auswertung numerische Werte zurückgeben, dann gibt der Ausdruck numerische Werte zurück.
6060 * In allen anderen Fällen, gibt der Ausdruck den Datentyp String zurück
6161
6262
6363Wenn 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:
6464{$if 0} wird als False ausgewertet und abgelehnt, während {$if 00} als True ausgewertet wird.
6565
6666---
67-*From the Free Pascal wiki, page "compile time expressions/de", as the Internet Archive kept it on 2023-06-04. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
67+*From the Free Pascal wiki, page "compile time expressions/de", as the Internet Archive kept it on 2023-06-04, last changed on 2020-02-12. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history