Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - Präprozessoren

Referenz-Navigation

 

Präprozessor-Anweisungen sind Symbole, die vor der Compilation durch einen bestimmten Ausdruck ersetzt werden; siehe Befehlsreferenzeintrag#DEFINE.

Themen:



Vordefinierte Symbole
Beachten Sie, dass zu jedem Symbol ein eigener Eintrag in der Referenz existiert.

SymbolbezeichnerÜbersetzung/Bedeutung
Befehlsreferenzeintrag__FB_WIN32__Ohne Wert; wird definiert, wenn der Code von der Win32-Version des Compilers umgesetzt wird. Durch Befehlsreferenzeintrag#IFDEF ist es möglich, bestimmte Codeteile nur zu compilieren, wenn der Code für Win32 umgesetzt werden soll
Befehlsreferenzeintrag__FB_DOS__Ohne Wert; wird definiert, wenn der Code von der DOS-Version des Compilers umgesetzt wird. Durch Befehlsreferenzeintrag#IFDEF ist es möglich, bestimmte Codeteile nur zu compilieren, wenn der Code für DOS umgesetzt werden soll
Befehlsreferenzeintrag__FB_LINUX__Ohne Wert; wird definiert, wenn der Code von der LINUX-Version des Compilers umgesetzt wird. Durch Befehlsreferenzeintrag#IFDEF ist es möglich, bestimmte Codeteile nur zu compilieren, wenn der Code für Linux umgesetzt werden soll
Befehlsreferenzeintrag__FB_XBOX__ , Befehlsreferenzeintrag__FB_CYGWIN__ , Befehlsreferenzeintrag__FB_DARWIN__ , Befehlsreferenzeintrag__FB_FREEBSD__ , Befehlsreferenzeintrag__FB_OPENBSD__ , Befehlsreferenzeintrag__FB_NETBSD__Ohne Wert; diese Symbole werden definiert, wenn der Code in der jeweiligen Version des Compilers umgesetzt wird. Durch Befehlsreferenzeintrag#IFDEF ist es möglich, bestimmte Codeteile nur zu compilieren, wenn der Code für diese bestimmte Version umgesetzt werden soll.
Befehlsreferenzeintrag__FB_PCOS__Ohne Wert; wird definiert, wenn unter einem PC-artigen Betriebssystem compiliert wurde (z. B. DOS, Windows, OS/2, Symbian OS)
Befehlsreferenzeintrag__FB_UNIX__Ohne Wert; wird definiert, wenn unter einem UNIX-artigen Betriebssystem compiliert wurde
Befehlsreferenzeintrag__FB_MAIN__Ohne Wert; wird definiert, sobald die DEFINE-Symbole und Makros des Hauptmoduls übersetzt werden.
Befehlsreferenzeintrag__FB_SIGNATURE__ein String, der die Signatur des Compilers enthält, z. B.: "FreeBASIC 0.24.0"
Befehlsreferenzeintrag__FB_VERSION__ein String, der die Version des Compilers enthält, z. B.: "0.24.0"
Befehlsreferenzeintrag__FB_VER_MAJOR__ein Integer, der die Versionshauptnummer des Compilers enthält, z. B.: 0
Befehlsreferenzeintrag__FB_VER_MINOR__ein Integer, der die Versionsunternummer des Compilers enthält, z. B.: 24
Befehlsreferenzeintrag__FB_VER_PATCH__ein Integer, der die Patchnummer des Compilers enthält, z. B.: 0
Befehlsreferenzeintrag__FB_MIN_VERSION__(major, minor, patch)Dieses Makro vergleicht die Version des verwendeten Compilers mit den angegebenen Daten. Es gibt -1 aus, wenn die Version des Compilers größer oder gleich den Spezifikationen ist, bzw. 0, wenn die Version kleiner ist.
Befehlsreferenzeintrag__DATE__ein String, der das Compilier-Datum im Format mm-dd-yyyy enthält, z. B.: "11-15-2012"
Befehlsreferenzeintrag__DATE_ISO__ein String, der das Compilier-Datum im Format yyyy-mm-dd enthält, z. B.: "2012-11-15"
Befehlsreferenzeintrag__TIME__ein String, der die Compilier-Uhrzeit im Format hh:mm:ss enthält, z. B.: "16:05:09"
Befehlsreferenzeintrag__FB_BUILD_DATE__ ein String, der das Datum, an dem der FB-Compiler erstellt wurde, im Format mm-dd-yyyy enthält
Befehlsreferenzeintrag__FILE__ein String, der den Dateinamen der Quellcode-Datei, die gerade umgesetzt wird, enthält; dies kann zur Fehlersuche eingesetzt werden
Befehlsreferenzeintrag__FILE_NQ__eine Zeichenkette, die den Namen des Moduls enthält, das gerade umgesetzt wird, jedoch nicht in Anführungszeichen wie bei __FILE__
Befehlsreferenzeintrag__FUNCTION__ein String, der den Namen der Prozedur, die gerade umgesetzt wird, enthält; dies kann zur Fehlersuche eingesetzt werden
Befehlsreferenzeintrag__FUNCTION_NQ__eine Zeichenkette, die das Symbol der Prozedur enthält, die gerade umgesetzt wird, jedoch nicht in Anführungszeichen wie bei __FUNCTION__
Befehlsreferenzeintrag__LINE__ein Integer, der die Zeile angibt, die gerade umgesetzt wird; dies kann zur Fehlersuche eingesetzt werden
Befehlsreferenzeintrag__PATH__ein String, der den Namen des Verzeichnisses enthält, in dem sich die gerade umgesetzte Quellcode-Datei befindet
Befehlsreferenzeintrag__FB_OPTION_EXPLICIT__ein Integer, dessen Wert -1 ist, wenn BefehlsreferenzeintragOPTION EXPLICIT verwendet wird, bzw. 0, wenn dies nicht der Fall ist
Befehlsreferenzeintrag__FB_OPTION_ESCAPE__ein Integer, dessen Wert -1 ist, wenn BefehlsreferenzeintragOPTION ESCAPE verwendet wird, bzw. 0, wenn dies nicht der Fall ist
Befehlsreferenzeintrag__FB_OPTION_DYNAMIC__ein Integer, dessen Wert -1 ist, wenn BefehlsreferenzeintragOPTION DYNAMIC verwendet wird, bzw. 0, wenn dies nicht der Fall ist
Befehlsreferenzeintrag__FB_OPTION_PRIVATE__ein Integer, dessen Wert -1 ist, wenn BefehlsreferenzeintragOPTION PRIVATE verwendet wird, bzw. 0, wenn dies nicht der Fall ist
Befehlsreferenzeintrag__FB_OPTION_BYVAL__ein Integer, dessen Wert -1 ist, wenn BefehlsreferenzeintragOPTION BYVAL verwendet wird, bzw. 0, wenn dies nicht der Fall ist
Befehlsreferenzeintrag__FB_OPTION_GOSUB__ein Integer, dessen Wert -1 ist, wenn BefehlsreferenzeintragOPTION GOSUB verwendet wird, bzw. 0, wenn dies nicht der Fall ist
Befehlsreferenzeintrag__FB_OUT_OBJ__ein Integer, dessen Wert -1 ist, wenn der Code zu einer Ressource (*.obj) compiliert wird, bzw. 0, wenn zu einem anderen Typ compiliert wird
Befehlsreferenzeintrag__FB_OUT_LIB__ein Integer, dessen Wert -1 ist, wenn der Code zur statischen Bibliothek (lib*.a oder lib*.a.dll für Importbibliotheken) compiliert wird, bzw. 0, wenn zu einem anderen Typ compiliert wird
Befehlsreferenzeintrag__FB_OUT_DLL__ein Integer, dessen Wert -1 ist, wenn der Code zur dynamischen Bibliothek (*.dll) compiliert wird, bzw. 0, wenn zu einem anderen Typ compiliert wird
Befehlsreferenzeintrag__FB_OUT_EXE__ein Integer, dessen Wert -1 ist, wenn der Code zur Executable (*.exe) compiliert wird, bzw. 0, wenn zu einem anderen Typ compiliert wird
Befehlsreferenzeintrag__FB_ARGC__eine Zahl, die die Anzahl der Kommandozeilenparameter an das Programm enthält
Befehlsreferenzeintrag__FB_ARGV__ein Pointer auf einen Speicherbereich, in dem sich BefehlsreferenzeintragZSTRING PTR befinden; diese zeigen auf die einzelnen Kommandozeilenparameter
Befehlsreferenzeintrag__FB_BIGENDIAN__hat den Wert -1, wenn für Big-Endian-Systeme compiliert wird, oder 0, wenn dies nicht der Fall ist
Befehlsreferenzeintrag__FB_DEBUG__hat den Wert -1, wenn mit der Kommandozeilenoption '-g' compiliert wird, oder 0, wenn dies nicht der Fall ist
Befehlsreferenzeintrag__FB_ERR__hat den Wert 0, 1, 3 oder 7, je nach der in der Kommandozeile aktivierten Fehlerbehandlungsroutine (keine, '-e', '-ex' oder '-exx')
Befehlsreferenzeintrag__FB_MT__hat den Wert -1, wenn mit der FB-Multithread-Lib compiliert wird, oder 0, wenn dies nicht der Fall ist
Befehlsreferenzeintrag__FB_LANG__wird zu einem String umgesetzt, der das Argument für die Kommandozeilenoption '-lang' enthält
Befehlsreferenzeintrag__FB_SSE__ohne einen Wert; wird definiert, wenn der Compiler 'SSE floating point arithmetics' compiliert (Befehlsreferenzeintrag-fpu SSE)
Befehlsreferenzeintrag__FB_FPU__ein String mit dem Wert "sse", wenn mit 'SSE floating point arithmetics' compiliert wurde, ansonsten "x87"
Befehlsreferenzeintrag__FB_FPMODE__ein String mit dem mittels Befehlsreferenzeintrag-fpmode eingestellte Wert ("fast" oder "precise")
Befehlsreferenzeintrag__FB_VECTORIZE__ein Integer mit dem mittels Befehlsreferenzeintrag-vec eingestellte Level (0, 1 oder 2)
Befehlsreferenzeintrag__FB_GCC__ein Integer, dessen Wert -1 ist, wenn der Code mit -gen gcc compiliert wird, bzw. 0, wenn -gen gas verwendet wird.
Befehlsreferenzeintrag__FB_BACKEND__ein String mit dem mittels Befehlsreferenzeintrag-gen eingestellte Backend ("gas" oder "gcc")
Befehlsreferenzeintrag__FB_64BIT__Ohne Wert; wird definiert, wenn der Code von der 64bit-Version des Compilers umgesetzt wird



Symbole ohne Wert
Ein Symbol muss nicht zwingend einen Wert haben, um nutzbringend eingesetzt werden zu können. Mit BefehlsreferenzeintragDEFINED kann geprüft werden, ob ein Symbol bereits definiert wurde. Auf diese Weise lässt sich z. B. ermitteln, ob eine Datei bereits eingebunden wurde oder auf welcher Plattform das Programm gerade läuft.

Beispiel:

' Code der Datei Definitions.bi
#DEFINE Def

TYPE xyz
  x AS INTEGER
  y AS INTEGER
  z AS INTEGER
END TYPE

'---------'

' Code der Datei Test.bas

#INCLUDE "Definitions.bi"

#IFNDEF Defs
  #ERROR Die Datei "Definitions.bi" wurde nicht eingebunden
#ENDIF

#IFDEF __FB_WIN32__
  #PRINT Setze Code für Windows um.
#ELSEIF DEFINED(__FB_DOS__)
  #PRINT Setze Code für DOS um.
#ELSEIF DEFINED(__FB_LINUX__)
  #PRINT Setze Code für Linux um.
#ENDIF



Makros
Makros sind wie BefehlsreferenzeintragFUNCTIONs Ausdrücke, die von einem Parameter abhängig sind. Im Gegensatz zu solchen werden die Symbole aber vor der Compilation in ihre Bedeutung umgesetzt, so dass kein Sprung im Programm ausgeführt werden muss. Im Gegensatz zu FUNCTIONs allerdings öffnen Makros keinen BefehlsreferenzeintragSCOPE-Block.

Beispiel:

#DEFINE pi 3.141592654
#DEFINE deg2rad(deg) ( (deg / 180) * pi )
#DEFINE rad2deg(rad) ( (rad / pi) * 180 )
PRINT "Pi = " & pi                         ' Ausgabe: 3.141592654
PRINT "180 im Bogenmass = " &deg2rad(180)  ' Ausgabe: 3.141592654
PRINT "Pi in Grad = " &rad2deg(Pi)         ' Ausgabe: 180

Eine besondere Bedeutung kommt Makros dadurch zu, dass sie im Code Zeichenketten zu Symbolen verketten können; dies geschieht über die Zeichen ##.

Beispiel:

#DEFINE TmpVar(n) t##n
DIM AS INTEGER TmpVar(1) = 5, TmpVar(2) = 7
PRINT "Macros: "; TmpVar(1) * TmpVar(2)
PRINT "Variables: "; t1 * t2

Bei jedem Zugriff auf TmpVar wird also tatsächlich auf ein Symbol zugegriffen, das mit 't' beginnt, und mit dem Wert von 'n' endet.

Auch mehrzeilige Makros können erstellt werden. Dazu bedient man sich des Metabefehls Befehlsreferenzeintrag#MACRO; siehe dort für Beispiele und genauere Erläuterungen.

Unterschiede zu früheren Versionen von FreeBASIC:


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 06.08.2007 von RedakteurVolta angelegt.
  • Die aktuellste Version wurde am 15.01.2014 von RedakteurMOD gespeichert.
  Versionen Versionen