FreeBASIC方言
 

FreeBASIC版本0.17b引入了-lang 命令行选项,用于更改基本语言的不同方言的语言兼容模式。

从版本0.18.3b开始,-lang qb 方言进一步限制为只允许QuickBASIC中允许的内容。

在版本0.18.4b中,添加了-lang fblite 方言,以将来替换-lang deprecated.

在版本0.20.0b中,添加了#lang指令和$Lang元指令,以从源指定方言。

-lang选项描述
fbFreeBASIC兼容性(默认)
qbqbasic兼容性
fbliteFreeBASIC语言兼容,具有更多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)键入后缀(!, #, $, %, &
    • 它们只允许使用数字文字,但建议使用Castfsingle),ddouble),lllongint),ululong),ullulongint)数字字面后缀来解决重载。

    • 使用DimReDimExternCommon声明变量时,需要显式类型(“As T ”)。使用VarConst声明的变量的类型从初始化值推断(使用Const可以使用显式类型)。

4)默认通过引用传递的所有参数
    • 默认情况下,所有内在的标量类型(数值和指针类型)都通过值(ByVal)传递。任何其他类型 - String或用户定义的类型 - 通过引用(ByRef)传递。
    • 使用-w pedantic命令行选项可以不显式显示ByValByRef的参数。

5)OPTION任何类型(无上下文相关性)
6)符号名称中的句点
    • 改用命名空间。
    • 将来可能允许嵌套的程序。

    • 对于后者使用SELECT expr AS CONST.

9) Resume
    • 大多数运行时和图形库程序现在返回错误代码,如:IF OPEN( "text" FOR INPUT AS #1 ) <> 0 THEN error...

10)'$DYNAMIC'$STATIC,嵌入在评论中的'$INCLUDE元命令
    • 关于Option Dynamic的项目5。
    • 使用#include "filename"而不是'$include.

11) Call or Let
    • 只需删除它们。

12)数字标签
    • 没有意见。

13)与关键字名称相同的全局符号
    • 在名称空间内声明它们。


-lang已弃用

支持的: Anything allowed in version 0.16b, but:

1)GOSUB/ RETURNON ... GOSUB(即使在模块级)
    • 所以GOSUB实现在-lang qb模式下可能是线程不安全的,允许快速执行(-lang qb不支持多线程,而-lang deprecated)。

不支持:

1)课
    • 符号名称中允许的时间使其太难和/或不明确。

2)操作符重载
    • 符号名称中允许的时间使其太难和/或不明确。

3)TYPE中的构造函数,析构函数和方法。
    • 符号名称中允许的时间使其太难和/或不明确。


-lang fblite

支持的: Anything allowed in the -lang已弃用 dialect, plus..

1) GOSUB/RETURN
- 使用Option Gosub启用。由于模糊性,这将禁用RETURN退出过程。

不支持:

1)Scope
    • 所有变量都被赋予过程范围。显式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)多线程
2)类和命名空间

3)程序和操作符重载

4)Type定义中的构造函数,析构函数和其他成员过程。

5)Scope

6)Extern

7)变量初始化
    • 所有变量都移动到过程范围(如QuickBASIC中),使初始化局部变量难以支持。