Referenz - FB-Dialektformen
Seit FreeBASIC v0.17 existiert die Kommandozeilenoption "-lang". Diese wird verwendet, um den Kompatibilitätsmodus auf verschiedene Versionen von FreeBASIC einzustellen. Die Option "-lang" benötigt einen Parameter, der angibt, mit welchem Kompatibilitätsmodus compiliert werden soll:
Option | Beschreibung |
---|---|
fb | FreeBASIC-Kompatibilität (Standard) |
deprecated | Kompatibilität zu früheren Versionen von FreeBASIC |
fblite | Kompatibilität zu FreeBASIC, aber mit einem Programmierstil, der kompatibler zu QBASIC ist |
qb | QBASIC-Kompatibilität |
Seit FreeBASIC v0.20 ist auch die Optionsangabe als Metabefehl #LANG "Sprachversion" am Anfang des Quelltextes möglich.
Die Option "-lang" wurde nötig, um Objektorientierung und andere Features in FreeBASIC zu ermöglichen, ohne die Abwärtskompatibilität zu QB oder zu Quellcodes für ältere Versionen von FreeBASIC aufgeben zu müssen oder viele verschiedene Compiler-Versionen entwickeln zu müssen. Um alte GW-BASIC- und QBasic-Quellcodes ohne größere Änderungen compilieren zu können, geben Sie die Option "-lang qb" an.
Beispiel: Um eine QBasic-Quelltextdatei mit dem Namen myprog.bas zu compilieren, geben Sie in der Befehlszeile
fbc myproc.bas -lang qb
ein (evtl. muss der Pfad zum Compiler ebenfalls angegeben werden).
Um Codes zu compilieren, die für FreeBASIC v0.16 oder älter geschrieben wurden, geben Sie die Kommandozeile "-lang deprecated" an. Der Modus "-lang fb" ist der Standard-Modus. Diese Option muss nicht explizit angegeben werden. "-lang fb" unterscheidet sich von "-lang deprecated" durch diese Dinge:
-lang fb
Nicht mehr unterstützt werden:
- Implizite Variablen: Alle Variablen müssen explizit deklariert werden, d. h. eine Variable kann nur benutzt werden, wenn sie zuvor mit DIM, COMMON, STATIC oder EXTERN deklariert wurde.
- Suffixe (! # $ % &): Suffixe sind nur noch in numerischen Konstanten erlaubt, allerdings wird empfohlen, stattdessen die Type-Casting-Funktionen (siehe CAST) oder die Suffixe f (single), d (double), ll (longint), ul (uinteger), ull (ulongint) zu verwenden.
- DEFxxx: Da keine impliziten Variablen mehr existieren, sind auch diese Schlüsselwörter obsolet; sie wurden entfernt. 'AS Typ' muss also immer angegeben werden (mit Ausnahme von Konstanten, bei denen der Datentyp automatisch gewählt wird; siehe dazu CONST.
- OPTION:
Die Festlegung von Standards mithilfe von OPTION steht nicht mehr zur Verfügung.
- OPTION BYVAL: Alle Variablen außer Arrays und UDTs werden standardmäßig BYVAL übergeben. Geben Sie die Kommandozeilenoption "-w pedantic" an, um Warnungen für jede Deklaration zu bekommen, bei der nicht explizit festgelegt wurde, ob eine Variable BYVAL oder BYREF übergeben wird.
- OPTION NOKEYWORD: Benutzen Sie stattdessen #UNDEF.
- OPTION ESCAPE: Um einen String mit ESCAPE-Sequenzen zu behandeln, stellen Sie einem String ein Ausrufezeichen ! voran. Benutzen Sie die Option "-w pedantic", um auf mögliche Escape-Sequenzen zu prüfen.
- OPTION EXPLICIT wird nicht mehr benötigt, da Variablen immer explizit deklariert werden müssen.
- OPTION DYNAMIC, OPTION STATIC: Arrays sind standardmäßig statisch. Um dynamische Arrays zu erstellen, verwenden Sie REDIM oder geben Sie bei der Dimensionierung keine Indizes an.
- OPTION BASE: Wird die untere Arraygrenze bei der Deklaration nicht explizit angegeben, so wird der Wert 0 verwendet. Geben Sie ggf. die untere Arraygrenze explizit an.
- OPTION PRIVATE: Prozeduren sind standardmäßig PUBLIC. Um private Prozeduren zu deklarieren, müssen diese explizit mit PRIVATE gekennzeichnet werden.
- OPTION GOSUB, OPTION NOGOSUB: GOSUB ist nicht mehr zulässig. RETURN dient ausschließlich zur Rückkehr aus Prozeduren.
- Punkte in Symbolnamen sind nicht mehr zulässig. Verwenden Sie stattdessen NAMESPACE.
- ON...GOSUB und ON...GOTO wurden entfernt. Verwenden Sie SELECT CASE [AS CONST] anstelle dieser Anweisungen.
- RESUME wurde entfernt. Viele Anweisungen können als Funktionen genutzt werden, um Laufzeitfehler abzufragen (z. B. OPEN)
- In Kommentare eingebundene Meta-Befehle: Die Metabefehle '$DYNAMIC, '$STATIC, '$INCLUDE, '$INCLIB existieren nicht mehr. Statt '$INCLUDE und '$INCLIB benutzen Sie #INCLUDE bzw. #INCLIB.
- CALL und LET existieren nicht mehr und können einfach weggelassen werden. LET besitzt eine neue Bedeutung für die mehrfache Variablenzuweisung.
- Numerische Labels, die nur aus einer Zahl bestehen, werden nicht mehr unterstützt.
- Globale Symbole, die den Namen eines internen Schlüsselworts besitzen, können nur genutzt werden, wenn sie innerhalb eines NAMESPACE deklariert werden.
-lang deprecated
Unterstützt wird:
alles, das bereits in FreeBASIC v0.16 unterstützt wurde, mit Ausnahme von ON...GOSUB, ON...GOTO und ON...GOSUB (auch auf der Modulebene)
Nicht unterstützt werden:
- Klassen: Da Punkte in Symbolnamen erlaubt sind, ist es zu schwierig, dieses Feature zu implementieren.
- Operator overloading: Da Punkte in Symbolnamen erlaubt sind, ist es zu schwierig, dieses Feature zu implementieren.
Die Option "-lang deprecated" wurde bereitgestellt, um ein einfaches Upgrade des Codes von einer Entwicklungsversion in die nächste zu ermöglichen. Sie wird möglicherweise in einem Major-Release wie FreeBasic 1.0 entfernt.
-lang fblite
Unterstützt wird:
alles, was in "-lang deprecated" erlaubt ist, außer SCOPE-Blöcken: Variablen gehören dem aktuellen Scope (Programmblock) an.
-lang qb
Unterstützt wird:
alles, was in "-lang fb" nicht erlaubt ist. Außerdem:
- CALL kann verwendet werden, um Forward-Referencing bei Funktionen zu realisieren.
- Sichtbarkeit von Variablen: Alle Variablen, ob implizit oder explizit deklariert, werden wie in QB im Scope der Prozedur alloziert.
Nicht unterstützt wird:
- Multi-Threading: Die Anweisungen THREADxxx, MUTEXxxx und CONDxxx können nicht eingesetzt werden. Siehe Multithreading.
- Klassen und NAMESPACEs
- Prozedur- und Operator-Overloading (siehe OVERLOAD, OPERATOR)
- SCOPE-Blöcke
- EXTERN-Blöcke
- Variablen-Initiatoren: Alle Variablen werden auf den Scope der Prozedur verschoben (wie in QB), sodass lokale Initiatoren schwierig zu implementieren sind.
FB-eigene Befehle im QB-Kompatiblitätsmodus
Befehle, die in FreeBASIC neu hinzugekommen sind, können auch im QB-Kompatiblitätsmodus benutzt werden: Versehen Sie diese mit einem doppelten Unterstrich am Wortanfang, um sie zu benutzen. Beispiel: __INSTRREV
Beachten Sie, dass bei Befehlen, deren Verhalten sich in FreeBasic geändert hat (z. B. SLEEP oder INKEY), auch das FreeBASIC-Verhalten übernommen wird. So wartet __SLEEP 1 im QB-Kompatibilitätsmodus eine Millisekunde, während SLEEP 1 - wie aus QB gewohnt - eine Sekunde wartet. Bei __INKEY wird dementsprechend CHR(255) statt CHR(0) als erweitertes Zeichen benutzt.
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|