Conditional compilation/de
Deutsch · English · Français · Suomi · Русский
Zurück zum Thema Verwendung von Bedingungen, Nachrichten und Makros.
Bedingte Compilierung
Die bedingte Compilierung bestimmt, welche Teile des Quellcodes in das fertige Programm aufgenommen werden.
Die bedingte Compilierung bestimmt, ob ein Abschnitt compiliert wird und damit Bestandteil des fertigen Programms wird.
Der Abschnitt, der nicht compiliert wird, wird auch nicht Bestandteil des fertigen Programms.
Die bedingte Compilierung basiert auf der Existenz (Vorhandensein) von Konstanten, dem Status von Compiler Direktiven und der Definition von selbst definierten Symbolen.
Selbst definierte Symbole
Selbst definierte Symbole gelten ab der Stelle ab der sie deklariert werden bis zu der Stelle an der ihre deklaration aufgehoben wird.
Wird die Deklaration der selbst definierten Symbole nicht aufgehoben, gilt die Deklaration der selbstdefinierten Symbole bis zum Ende der Unit.\
Beispiel 1: Anlegen eines selbstdefinierten Symbols:\
{$define MeinSymbol} // definiert ein Symbol
... // der Bereich, in dem das selbstdefinierte Symbol gültig ist
{$undef MeinSymbol} // hebt die Definition des Symbols wieder aufBeispiel 2: Anlegen und abfragen eines selbstdefinierten Symbols:\
...
{$define MeinSymbol} // definiert ein Symbol
...
{$ifdef MeinSymbol} // Fragt die Existenz des selbst definierten Symbols ab und compiliert den IF-Zweig
...;
{$else} // der Else-Zweig wird nicht compiliert
...;
{$endif}
...
{$undef MeinSymbol} // hebt die Definition des selbstdefinierten Symbols wieder auf,
// damit ist das selbstdefinierte Symbol nicht mehr vorhanden
...Beispiel 3: Abfragen eines nicht vorhandenen selbstdefinierten Symbols:\
// da das selbstdefinierte Symbol hier nicht definiert (vorhanden) ist, wird in diesem Fall der Sonst-Zweig (Else-Zweig) compiliert
// das heisst, wenn ein selbstdefiniertes Symbol nicht vorhanden ist, kommt vom Compiler keine Fehlermeldung
// und es wird soweit vorhanden der Else-Zweig compiliert, bzw. wenn der Else-Zweig nicht vorhanden ist wird nichts compiliert
...
{$ifdef MeinSymbol} // Fragt die Existenz des selbst definierten Symbols ab und compiliert den Else-Zweig
...;
{$else} // compiliert den Else-Zweig
...;
{$endif}
...Beispiel 4: Abfragen, ob es sich um eine Intel/AMD 32/64Bit CPU handelt:\
...
{$if defined(cpux86_64) or defined(cpux86)}
...; // Intel/AMD-CPU
{$else}
...; // Es ist keine PC-CPU, zB. ARM (Raspberry)
{$endif}
...Vordefinierte Symbole
Vordefinierte Symbole (predefined symbols) werden im Gegensatz zu selbstdefinierten Symbolen vom Compiler erstellt.
Das Erstellen der vordefinierten Symbole (predefined symbols) hängt von bestimmten Bedingungen wie Compilereinstellung, Prozessor usw. ab.
Das heißt, das nicht alle vordefinierten Symbole gleichzeitig existieren (vorkommen) können.
Vordefinierte Symbole (predefined symbols) gelten im Gegensatz zu selbstdefinierten Symbolen global, d. h. sie gelten für das gesamte Programm.
Vordefinierte Symbole (predefined symbols) werden wie selbstdefinerte Symbole verwendet.\
Liste der vordefinieten Symbole:
Diese Symbole können beim compilieren vom Compiler definert werden.
Das heisst, das während des
Diese Liste vordefinierter Symbole werden möglicherweise beim compilieren gesetzt.
Das heisst, diese Symbole können möglicherweise nicht existieren (vorkommen).\
Symbol
Beschreibung
FPC_LINK_DYNAMIC
Das vordefinerte Symbol ist gesetzt, wenn das Programm mit dynamischem Linken erstellt wird.
Das entspricht dem Compiler switch -XC.
FPC_LINK_STATIC
Das vordefinerte Symbol ist gesetzt, wenn das Programm statisch gelinkt wird.
Das ist die Standardeinstellung.
FPC_LINK_SMART
Das vordefinerte Symbol ist gesetzt, wenn das Programm smart gelinkt wird.
Das entspricht dem Compiler switch -XX
FPC_PROFILE
Das vordefinerte Symbol ist gesetzt, wenn profiling code zum Programm hinzugefügt wird.
Das entspricht dem Compiler switch -pg
FPC_CROSSCOMPILING
Das vordefinerte Symbol ist gesetzt, wenn das Zielbetriebsystem festgelegt wurde.
FPC
Das vordefinerte Symbol ist bei Free Pascal immer gesetzt.
VER2
Das vordefinerte Symbol ist bei Free Pascal Version 2.x.x immer gesetzt.
VER2_0
Das vordefinerte Symbol ist bei Free Pascal Version 2.0.x immer gesetzt.
VER2_2
Das vordefinerte Symbol ist bei Free Pascal Version 2.2.x immer gesetzt.
FPC_VERSION
Enthält die Hauptversionsnummer von FPC.
FPC_RELEASE
Enthält die Unterversionsnummer von FPC.
FPC_PATCH
Enthält die Revisionsnummer von FPC.
FPC_FULLVERSION
Enthält die vollständige Versionsnummer als Ganzzahl.
Für FPC 2.6.0 ist der Wert 20600.
ENDIAN_LITTLE
Das vordefinerte Symbol ist gesetzt, wenn das Ziel ein little-endian Prozessor ist(80x86, Alpha, ARM, MIPS little endian).
Die Begriffe Little-Endian und Big-Endian bezeichnen bei Prozessoren die Speicherorganisation für einfache Zahlenwerte.
ENDIAN_BIG
Das vordefinerte Symbol ist gesetzt, wenn das Ziel ein big-endian Prozessor ist (680x0, PowerPC, SPARC, MIPS big endian).
Die Begriffe Little-Endian und Big-Endian bezeichnen bei Prozessoren die Speicherorganisation für einfache Zahlenwerte.
FPC_DELPHI
Free Pascal arbeitet im Delphi-Modus.
Das entspricht dem Compiler switch -MDelphi bzw. dem Compilermodus $MODE DELPHI)
FPC_OBJFPC
Free Pascal arbeitet im OBJFPC-Modus.
Das entspricht dem Compiler switch -Mobjfpc bzw. dem Compilermodus $MODE OBJFPC)
FPC_TP
Free Pascal arbeitet im Turbopascal-Modus.
Das entspricht dem Compiler switch -Mtp bzw. dem Compilermodus $MODE TP)
FPC_GPC
Free Pascal arbeitet im GNU Pascal-Modus.
Das entspricht dem Compiler switch -SP bzw. dem Compilermodus $MODE GPC)
Folgende CPU-Typen können beim compilieren vom Compiler gesetzt werden.\
Symbol
Beschreibung
CPU86
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein Intel80x86 oder kompatibler Prozessor ist.
CPU87
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein Intel80x87 oder kompatibler Prozessor ist.
CPU386
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein Intel386 oder ein späterer Prozessortyp ist.
CPU68K
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein Motorola 680x0 oder kompatibler Prozessor ist.
CPUM68020
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein Motorola 68020 oder ein späterer Prozessortyp ist.
CPU68
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein Motorola 680x0 oder kompatibler Prozessor ist.
CPUSPARC32
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein SPARC v7 oder kompatibler Prozessor ist.
CPUSPARC
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein SPARC v7 oder kompatibler Prozessor ist.
CPUALPHA
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein Alpha AXP oder kompatibler Prozessor ist.
CPUPOWERPC
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein 32-bit or 64-bit PowerPC oder kompatibler Prozessor ist.
CPUPOWERPC32
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein 32-bit PowerPC oder kompatibler Prozessor ist.
CPUPOWERPC64
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein 64-bit PowerPC oder kompatibler Prozessor ist.
CPUX86
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein AMD64 oder Intel 32-bit Prozessor ist.
CPUX86_64
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein AMD64 oder Intel 64-bit Prozessor ist.
CPUAMD64
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein AMD64 oder Intel 64-bit Prozessor ist.
CPUIA64
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein Intel Itanium 64-bit Prozessor ist.
CPUARM
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein ARM 32-bit Prozessor ist.
CPUAVR
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein 8/16Bit AVR.
CPU16
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein 16-bit Prozessor ist.
CPU32
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein 32-bit Prozessor ist.
CPU64
Das vordefinerte Symbol ist gesetzt, wenn der Zielprozessor ein 64-bit Prozessor ist.
Folgende Fliesskomma-Einheiten können beim compilieren vom Compiler gesetzt werden.\
Symbol
Beschreibung
FPUSOFT
Softwareemulation der Fliesskommaeinheit (betrifft alle CPU Typen).
FPUSSE64
Das vordefinerte Symbol ist gesetzt, wenn die Fliesskommaeinheit eine SSE64 FPU oder höher oder AMD64 ist.
FPUSSE
Das vordefinerte Symbol ist gesetzt, wenn die Fliesskommaeinheit eine SSE-Einheit auf einem Intel386 Prozessor und höher ist.
FPUSSE2
Das vordefinerte Symbol ist gesetzt, wenn die Fliesskommaeinheit eine SSE2-Einheit auf einem Intel386 Prozessor und höher ist.
FPUSSE3
Das vordefinerte Symbol ist gesetzt, wenn die Fliesskommaeinheit eine SSE3-Einheit auf einem Intel386 Prozessor und höher ist.
FPULIBGCC
Das vordefinerte Symbol ist gesetzt, wenn die Fliesskommaeinheit eine Emulation mittels GCC-Bibliothek auf einem ARM oder einem M86K Prozessor ist.
FPU68881
Das vordefinerte Symbol ist gesetzt, wenn die Fliesskommaeinheit ein 68881 aufeinem M68K Prozessor ist.
FPUFPA
Das vordefinerte Symbol ist gesetzt, wenn die Fliesskommaeinheit eine FPA auf einem ARM Prozessor ist.
FPUFPA10
Das vordefinerte Symbol ist gesetzt, wenn die Fliesskommaeinheit eine FPA 10 auf einem ARM Prozessorist.
FPUFPA11
Das vordefinerte Symbol ist gesetzt, wenn die Fliesskommaeinheit eine FPA 11 auf einem ARM Prozessor ist.
FPUVFP
Das vordefinerte Symbol ist gesetzt, wenn die Fliesskommaeinheit eine VFP auf einem ARM Prozessor ist.
FPUX87
Das vordefinerte Symbol ist gesetzt, wenn die Fliesskommaeinheit eine x87 auf einem Intel386 Prozessor oder höher ist.
FPUITANIUM
Das vordefinerte Symbol ist gesetzt, wenn die Fliesskommaeinheit auf einem Intel Itanium Prozessor ist.
FPUSTANDARD
Das vordefinerte Symbol ist gesetzt, wenn die Fliesskommaeinheit auf einem PowerPC (32/64 bit) Prozessor ist.
FPUHARD
Das vordefinerte Symbol ist gesetzt, wenn die Fliesskommaeinheit auf einem Sparc Prozessor ist.
Folgende Betriebssystemsymbole können beim compilieren vom Compiler gesetzt werden.\
Zielbetriebssystem
Symbol(e)
linux
LINUX, UNIX
freebsd
FREEBSD, BSD, UNIX
netbsd
NETBSD, BSD, UNIX
sunos
SUNOS, SOLARIS, UNIX
go32v2 (Erweiterung für DOS)
GO32V2, DPMI
os2
OS2
emx (Erweiterung für DOS, OS2)
OS2, EMX
Windows (alle Versionen)
WINDOWS
Windows 32-bit
WIN32, MSWINDOWS
Windows 64-bit
WIN64, MSWINDOWS
Windows (winCE)
WINCE, UNDER_CE, UNICODE
Classic Amiga
AMIGA
Atari TOS
ATARI
Classic Macintosh
MAC
PalmOS
PALMOS
PalmOS
PALMOS
BeOS
BEOS, UNIX
QNX RTP
QNX, UNIX
Mac OS X
BSD, DARWIN, UNIX
From the Free Pascal wiki, page "Conditional compilation/de", as it stood on 2020-02-11 after a change by Trev, out of the wiki's dump of 2024-05-26. 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.
Talk about this page
Nobody has opened a bench for this page yet. Sign in to open one.
