Sign in Join
Wiki copytemporary

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:\

pascal
{$define MeinSymbol}  // definiert ein Symbol
...                   // der Bereich, in dem das selbstdefinierte Symbol gültig ist
{$undef MeinSymbol}   // hebt die Definition des Symbols wieder auf

Beispiel 2: Anlegen und abfragen eines selbstdefinierten Symbols:\

pascal
...
{$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:\

pascal
// 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:\

pascal
...
  {$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.

Revision 2, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.