FreeBasic: Präprozessoren


Präprozessor Befehle Bearbeiten

Der Präprozessor liest vor dem kompilieren den Quelltext und ändert ihn um. Wie er ändert meinen Quelltext? Nein, oder eigentlich schon aber nur das was du ihm vorher sagst. Ein Beispiel:

#IFDEF __FB_WIN32__
  Windows Variante deines Quelltexts.
#ENDIF
#IFDEF __FB_DOS__
  Variante ohne die Funktionen die es auf DOS nicht gibt.
#ENDIF

Einfach oder? Wenn der Quelltext kompiliert wird, wurde vorher der Teil gelöscht der für DOS zuständig ist, oder auf DOS der Teil der für Windows zuständig ist. Praktisch oder? Unten steht eine Tabelle mit allen Konstanten. Du kannst auch folgendes schreiben:

#IF __FB_VERSION__ = "0.20"
  Code der erst ab dieser Version möglich ist.
#ELSE
  Ansonsten dieser Code
#ENDIF

Das Funktioniert gleich wie If nur das der Codeteil dessen Bedingung nicht erfüllt ist einfach weggelassen wird. Mit #ERROR kannst du das kompilieren abbrechen und einen von dir gewählten Fehlertext ausgeben. Ausserdem gibt es noch #lang mit dem die Sprache eingestellt wird. Möglich sind "fb" für FreeBasic, "deprecated" für FreeBasic Programm für Version 0.16 oder früher und "qb" für QuickBasic Programme.

Vordefinierte Symbole Bearbeiten

Symbolbezeichner Wert/Bedeutung
__FB_WIN32__ Ohne Wert; ist nur definiert, wenn unter Windows kompiliert wird.
__FB_DOS__ Ohne Wert; ist nur definiert, wenn unter DOS kompiliert wird.
__FB_LINUX__ Ohne Wert; ist nur definiert, wenn unter Linux kompiliert wird.
__FB_MAIN__ Ohne Wert; dieses Symbol wird definiert, sobald die #DEFINE-Symbole und Makros des Hauptmoduls überstetzt werden.
__FB_SIGNATURE__ Ein String, der die Signatur des Compilers enthält.
__FB_VERSION__ Version des Compiler z.B.: 0.15
__FB_VER_MAJOR__ Versionsnummer des Compiler, z.B.: 0
__FB_VER_MINOR__ Minor Nummer des Compiler, z.B.: 15
__FB_VER_PATCH__ Patch Verion des Compiler, z.B.: 0
__FB_MIN_VERSION__(major, minor, patch) Dieses Makro vergleicht die Version des verwendeten Compilers mit den angegebenen Daten.

__FB_MIN_VERSION__ ist folgendermaßen definiert: #DEFINE __FB_MIN_VERSION__(major, minor, patch_level) _ ((__FB_VER_MAJOR__ > major) OR _ ((__FB_VER_MAJOR__ = major) AND ((__FB_VER_MINOR__ > minor) OR _ ( __FB_VER_MINOR__ = minor AND __FB_VER_PATCH__ >= patch_level))))

__DATE__ Ist mit dem aktuellen Datum definiert, z.B.: 2005/11/05
__TIME__ Ist mit der aktuellen Uhrzeit definiert, z.B.: 16:05:09
__FILE__ Enthält den Dateinamen der Quellcode-Datei, die gerade umgesetzt wird.
__FUNCTION__ Enthält den Namen der Prozedur, die gerade umgesetzt wird.
__LINE__ Ist immer definiert mit der Zeilennummer in dem __LINE__ steht.