Referenz - DEFINE (Meta)
Syntax A: #DEFINE Symbol [ Ausdruck ]
Syntax B: #DEFINE Symbol( Parameter ) Makro
Syntax C: #DEFINE Symbol( Parameter, weitereParameter... ) Makro
Typ: Metabefehl
Kategorie: Präprozessoren
#DEFINE definiert ein Symbol mit benutzerdefinierter Bedeutung oder ein Makro.
- 'Symbol' ist ein Bezeichner, der direkt vor der Kompilation durch seinen Ausdruck ersetzt wird. Selbst wenn es keinen Wert besitzt (wie in Syntax A ohne Angabe von 'Ausdruck') kann das Symbol bereits mit
DEFINED verwendet werden. - Das Symbol ist nur in dem
SCOPE-Block (auch
SUB,
FOR...NEXT,
WHILE...WEND,
DO...LOOP usw.) sichtbar, in dem es definiert wurde. Wenn es auf Modulebene definiert wurde, ist es im gesamten Modul sichtbar.
NAMESPACEs haben keinen Effekt auf die Sichtbarkeit des Symbols.
Ein Makro ist im Grunde eine
FUNCTION; direkt vor der Kompilation wird der Makro-Bezeichner durch seinen Ausdruck ersetzt. Dabei können in diesem Ausdruck Parameter verwendet werden, die zuvor unter 'Parameter' festgelegt wurden. Makros werden meist für häufig auftretende mathematische Formeln verwendet.
Durch einfaches Definieren eines Symbols kann das Programm komplett anders laufen (denken Sie an Kompatibilität oder Portabilität).
Diese Funktion ermöglichte FreeBASIC u. a., portabel zu LINUX und anderen System zu sein. Einige Symbole und Makros sind bereits vordefiniert; siehe
Präprozessoren.
Seit FreeBASIC v0.16 können Makros auch als Parameter für andere Makros übergeben werden. In diesem Fall müssen auch dann Klammern für die Parameterliste angegeben werden, wenn es sich um ein parameterloses Makro handelt.
Seit der SVN-Version 0.22 können Makros mit einer variablen Anzahl von Parametern erstellt werden, indem man "..." (Ellipsis) angibt.
Beispiel:
Makros erstellen, die zwischen Altgrad(DEG, Kreis mit 360°), Neugrad(GON, Kreis mit 400gon) und Bogenmaß umrechnen
#DEFINE pi 4# * ATN(1)
#DEFINE deg2rad(deg) ( (deg / 45#) * ATN(1#))
#DEFINE rad2deg(rad) ( (rad / ATN(1#)) * 45# )
'Hinweis: 180/Pi=(4*45)/(4*ATN(1))=45/ATN(1)
#DEFINE gon2rad(gon) ( (gon / 50#) * ATN(1#))
#DEFINE rad2gon(rad) ( (rad / ATN(1#)) * 50# )
'Hinweis: 200/Pi=(4*50)/(4*ATN(1))=50/ATN(1)
PRINT "PI ="; pi
' Ausgabe: 3.141592654
PRINT "180 im Bogenmaß: " & deg2rad(180)
' Ausgabe: 3.141592654
PRINT "3.141592654 in Altgrad°(DEG): " & rad2deg(pi)
' Ausgabe: 180
PRINT "200gon im Bogenmaß: " & gon2rad(200)
' Ausgabe: 3.141592654
PRINT "3.141592654 in Neugrad(GON): " & rad2gon(pi)
' Ausgabe: 200
Beispiel mit variabler Anzahl von Parametern:
#include "crt.bi"
#define eprintf(Format, args...) fprintf(stderr, Format, args)
eprintf(!"Hello from printf: %i %s %i\n", 5, "test", 123)
#define car(a, b...) a
#define cdr(a, b...) bUnterschiede zu QuickBASIC:
- neu in FreeBASIC
Unterschiede zu früheren Versionen von FreeBASIC:
Seit FreeBASIC v0.16 können Makros auch als Parameter für andere Makros übergeben werden. In diesem Fall müssen auch dann Klammern für die Parameterliste angegeben werden, wenn es sich um ein parameterloses Makro handelt.
Siehe auch:
DEFINED,
UNDEF (Meta),
MACRO (Meta),
IF (Meta),
IFDEF (Meta),
IFNDEF (Meta),
Präprozessoren,
Präprozessor-Anweisungen
| Zusätzliche Informationen und Funktionen | ||||
|---|---|---|---|---|
|
||||




FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!
Versionen