FreeBASIC版本0.17b引入了
-lang 命令行选项,用于更改基本语言的不同方言的语言兼容模式。
从版本0.18.3b开始,
-lang qb 方言进一步限制为只允许
QuickBASIC中允许的内容。
在版本0.18.4b中,添加了
-lang fblite 方言,以将来替换
-lang deprecated.
在版本0.20.0b中,添加了
#lang指令和
$Lang元指令,以从源指定方言。
-lang选项 | 描述 |
fb | FreeBASIC兼容性(默认) |
qb | qbasic兼容性 |
fblite | FreeBASIC语言兼容,具有更多QBASIC兼容的编码风格 |
弃用 | 与FB 0.16的兼容性 |
需要
-lang 选项,以便将来允许FreeBASIC支持面向对象和其他功能,而不会影响QuickBASIC支持或破坏与旧版本的FreeBASIC源的兼容性,并且不会使FreeBASIC难以使用许多不同版本的非常类似的软件包进行维护。如果需要,QuickBASIC支持可以继续改进,而不会破坏专门为FreeBASIC编写的源代码。
要编译旧的GW-BASIC或QuickBASIC / QBasic源,没有太多更改,请在运行
fbc时在命令行中使用
-lang qb 选项。此选项将演变成与QuickBASIC / QBasic代码更好的兼容性。
要从0.16b编译FreeBASIC源,请使用
-lang deprecated 选项。此选项保持兼容性,并且将来不会发展,当FreeBASIC达到非测试版本时,可能会消失此选项。
对于想要访问FreeBASIC的一些新功能的程序员,但是要保留更多QBASIC友好的编程风格,请使用
-lang fblite 选项。这种方言未来将不会发生重大变化,但将继续得到维护和支持。
此选项也与使用旧版本的FreeBASIC的源最兼容。
建议使用
-lang fb 新项目,因为新功能(对象类,继承..)将专门添加到此方言中。
-lang fb(默认模式)
不支持:
1)隐式变量声明
2)键入后缀(!, #, $, %, &)
- 它们只允许使用数字文字,但建议使用Cast或f(single),d(double),ll(longint),ul(ulong),ull(ulongint)数字字面后缀来解决重载。
3)
DefByte,
DefUByte,
DefShort,
DefUShort,
DefInt,
DefUInt,
DefLng,
Deflongint,
Defulongint,
DefSng,
DefDbl,
DefStr
4)默认通过引用传递的所有参数
5)OPTION任何类型(无上下文相关性)
6)符号名称中的句点
- 对于后者使用SELECT expr AS CONST.
- 大多数运行时和图形库程序现在返回错误代码,如:IF OPEN( "text" FOR INPUT AS #1 ) <> 0 THEN error...
10)'$DYNAMIC,'$STATIC,嵌入在评论中的'$INCLUDE元命令
12)数字标签
13)与关键字名称相同的全局符号
-lang已弃用
支持的: Anything allowed in version 0.16b, but:
1)GOSUB/ RETURN和ON ... GOSUB(即使在模块级)
- 所以GOSUB实现在-lang qb模式下可能是线程不安全的,允许快速执行(-lang qb不支持多线程,而-lang deprecated)。
不支持:
1)课
2)操作符重载
3)TYPE中的构造函数,析构函数和方法。
-lang fblite
- 所有变量都被赋予过程范围。显式Scope块可能稍后添加。
-lang qb
支持的: Everything not supported/allowed in the -lang fb dialect, plus..
1)
Call可以与前向引用的函数一起使用。
2)
Shared可以在函数内部使用。(W.I.P.)
3)隐式或显式声明的所有变量始终在过程范围中赋值,如QuickBASIC。
4)
Data语句不会查找符号,每个令牌都假定为一个文字字符串,即使没有引号,就像在QuickBASIC中一样。
不支持:
1)多线程
- 所有变量都移动到过程范围(如QuickBASIC中),使初始化局部变量难以支持。