Rozdíly mezi FreeBASIC a QuickBASIC
 
Od verze 0.17 FreeBASIC představil -lang volbu příkazového řádku, která se používá ke změně režimu kompatibility jazyka. Použitím -lang qb možnosti při kompilaci, zvolíte nejvíce QB kompatibilní analyzátor. Všechny rozdíly, uvedené níže, předpokládají, že byla použita volba -lang qb.

Nekompatibility Architektury/Platformy
  • FreeBASIC je napsán pro 32-bitové operační systémy 32 bit DOS extender, a nemůže využívat kód napsaný pro staré 16-bitové DOS, 16 bit assemblery a paměťové segmenty (segment & offset, XMS/EMS, ...).
  • DEF SEG již není potřebný a nebude fungovat. Kódy obsahující POKE do videopaměti by měly být nadále funkční, pro DOS ale bude lepší je předělat použitím DPMI funkcí.
  • CALL INTERRUPT již nefunguje, protože se opírá o 16-bitový DOS. DOS přerušení lze vyvolat v DOS32 verzích pomocí DPMI knihovny, ale i tak to bude podstatný zpomalovač provádění kódu, protože změny režimů 32bit-16bit-32bit si vyžádají vždy značný procesorový čas.

Změny kvůli nejednoznačnosti
  • Skalární proměnná a pole se stejným názvem a příponou již nemohou sdílet stejný název.
  • SHARED nelze použít uvnitř SUB nebo FUNCTION, mělo to za následek sdílení proměnných, které nejsou definovány v hlavním programu. Správné použití DIM SHARED, je použitím v hlavním programu.
  • COMMON deklarace nejsou závislé na pořadí, v jakém byly vytvořeny. Proměnné jsou (?)uzavřeny jménem a z tohoto důvodu již názvy COMMON nejsou podporovány. Všechna COMMON pole v FB jsou 'variable-length arrays' - pole proměnné délky.
  • Jestliže má řádkový If (zbytečný) apendix bezprostředně po THEN, musí být v FB zakončen End If. Je-li (nepotřebná) větev odstraněna, bude se FB chovat shodně s QB.

Rozdíly v designu
  • Grafická podpora byla interně přepracována, viz GfxLib - Přehled o grafické knihovně FreeBASIC.
  • CLEAR se již nepoužívá k resetování všech proměnných a nastavení zásobníku. Proměnné musí být resetovány každá zvlášť a velikost zásobníku lze změnit v příkazovém řádku kompilátoru. Klíčové slovo CLEAR se používá k vyplnění paměti ve FB.
  • Řetězec položky DATA musí být ve FB v uvozovkách, v QB byly volitelné.
  • Všechny funkce musí být ve FreeBASICu deklarovány CALL. S CALL je dostupno méně prototypů funkcí v QuickBASIC. (v budoucnu by měly být opět podporovány s -lang qb)
  • Ve FreeBASIC musí být všechna pole explicitně deklarována. (Interpretovaná QuickBASIC pole jsou vytvářeny až s 10-ti indexy.)
  • Řetězce používají null (char 0) terminátor (ukončovací znak), aby byly kompatibilní s C knihovnami a s Windows API, řetězce s fixní délkou teď už neobsahují znaky chr$(0).
  • Při INKEY[$] čtení rozšířených kláves (Num Pad, Šipky...) se vrací dvouznakový řetězec. Ve FB je první znak CHR[$](255), v QB je tento první znak CHR$(0).
  • Pro řetězce fixní délky vrací FreeBASIC reálnou délku jako Len, plus jeden (null-char), a to i pro rozsahy Type.
  • Ve FreeBASICu jsou nepoužité znaky nastaveny na 0, bez ohledu na volbu kompilátoru "-lang". V QB jsou nepoužité znaky nastaveny na ASCII 32, tzn. mezeru (" ").
  • Je-li řetězec pevné délky deklarován, ale není inicializován, jsou všechny znaky nastaveny na 0, a to jak ve FreeBASIC, tak i v QB.
  • Pole jsou ve FB uložena s předností řádku, v QB jsou uloženy defaultně s předností sloupce. Řazení s předností v řádku: data se stejným koncovým indexem na sebe navazují. Řazení s předností sloupce: data se stejným počátečním indexem na sebe navazují. Příklad: Pokud máte DIM A(1 TO 3, 1 TO 8), pak s předností řádku jsou prvky uloženy v pořadí A(3,5), následuje A(3,6); při řazení s předností sloupce je prvek A(3,5) následován A(4,5).
  • Program se nezastaví, pokud se v příkazovém řádku použije volba -e nebo -ex. Tyto volby umožňují využít chyby v QB režimu pro jejich manipulaci (ON ERROR, RESUME...).
  • Čísla v osmičkové soustavě jsou psány jen &o..., zatímco v QB mohly být zapisovány jako &o... nebo &....
  • Ve FB smyčky FOR v subs/functions neakceptují argumenty přijaté byref jako čítače. Musí být použity místní proměnné.
  • FB nerespektuje v Locate čtvrtý a pátý argument pro tvar kurzoru.
  • Screen v FB neumožňuje přepnout viditelnou, nebo pracovní stránku. Místo toho je příkaz ScreenSet.
  • Color v FB neumožňuje třetí argument pro barvu ohraničení.
  • Ve FB Timer vrátí počet sekund od zapnutí počítače, zatímco TIMER v QB počet sekund od půlnoci. (jen Win32 a Linux: Už žádné balení o půlnoci! :)!)
  • V QB chr$(13) vložený v řetězci způsobil CR+LF (tzn. ENTER) při PRINTu. Ve FB CHR(13) tiskne jen CR.
    (pozn.překl.: To jsem v pasti, (viz též Wikipedia.cz). Takže co? Podle mého je to zbytečná poznámka, anebo autor zapomněl dopsat, jaký to má vliv na dojivost žížal. :-(
  • EOF již nemůže být použita k detekci prázdné vyrovnávací paměti. Prázdný buffer by měl být ve FB testován porovnáním LOC s 0. Také pro soubory otevřené v režimu RANDOM nebo BINARY, EOF vrací nenulovou hodnotu po zjištění konce souboru. Viz EOF.
  • Cekočíselné proměnné ve FB nesignalizují přetečení, ani s aktivní volbou -ex. Jakýkoliv doposud spolehlivý QB kód na odstranění chyb přetečení celého čísla, nebude ve FB fungovat.

Archaické příkazy
  • BSAVE a BLOAD již lze ve FB využít jen k načtení a uložení obrazovek, nebo grafického bufferu. Budou fungovat pouze ve spojení s GFXlib. To znamená, je-li programem vyžádán grafický screen režim. Konzolu nelze uložit či vyvolat s BSAVE, BLOAD. Další funkci BSAVE-BLOAD, ukládání a načítání plných polí, lze snadno nahradit GET a PUT.
  • Příkaz FIELD, pro načtení definic za běhu, (?) byl ponechán stranou. FIELD je ve FB použit pro specifikaci zarovnání rozsahu proměnných v Type.
  • Příkazy PC Speakeru již nefungují: Všechny odkazy na SOUND nebo PLAY budou mít za následek chybové hlášení. Pro napodobení těchto funkcí je k dispozici knihovna třetí strany, která ale není součástí FreeBASIC.
  • Programování, řízené fake událostmi (ON KEY, ON PEN, ON STRIG, ON TIMER) nefunguje. Může být napodobeno samostatnou knihovnou.
  • MKSMBF$ a všechny příkazy MKxMBF$, podporované verzemi před QB4.0, Microsoftem chráněný formát práce s desetinnou čárkou, není ve FB zabudován.
  • Použití závorek v argumentech předávaných funkci, emulující předání jako hodnoty není povoleno. Výstřednost CALL, kdy jsou všechny argumenty předány hodnotou, již nefunguje. Správné je použití klíčových slov ByVal a ByRef.
  • FILES není implementován (zabudován). Místo něj lze použít PDS 7.1-compatibilní Dir[$].
  • IOCTL, ERRDEV a ERRDEV$, funkce nižší úrovně pro přístup k hardware nejsou implementovány, protože byly závislé na OS.
  • CALL ABSOLUTE pro spuštění řádkového strojového kódu není podporován. Místo toho se používají Asm...END ASM bloky pro vložení příkazů Assembleru. Nebo použijte jednořádkový příkaz ASM ....

Překlad: Gmisiycs 18.2.2016