Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [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 - DEFINE (Meta)

Referenz-Navigation

 

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.

Ein Makro ist im Grunde eine BefehlsreferenzeintragFUNCTION; 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 BefehlsreferenzeintragPrä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...) b

Unterschiede 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:
BefehlsreferenzeintragDEFINED, BefehlsreferenzeintragUNDEF (Meta), BefehlsreferenzeintragMACRO (Meta), BefehlsreferenzeintragIF (Meta), BefehlsreferenzeintragIFDEF (Meta), BefehlsreferenzeintragIFNDEF (Meta), BefehlsreferenzeintragPräprozessoren, BefehlsreferenzeintragPräprozessor-Anweisungen


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