**FreeBASIC** 是一个 BASIC 语言的编译器，可运行在Microsoft Windows、保护模式的DOS（DOS扩展器）、Linux以及Xbox上。

FreeBASIC通过使用"QB"关键字可以在高级别上支持用QBASIC编写的程序。许多用QBASIC写的程序可以在不需任何修改的情况下编译和运行在这个模式下。但是如果使用默认的参数来编译的话，大部分的程序还是要进行一些修改的。

特性
--

### 平台支持

FreeBASIC 现在可以运行在64位和32位的 Windows、GNU/Linux，FreeBSD, 以及16位的 DOS系统。也可以为 Xbox 创建应用程序（Xbox 版本目前已不再维护）。运行时库被设计成可移植的。所有第三方工具均使用来自 GNU Binutils。系统上编译器 100% 用 FreeBASIC 代码写成，使得可以简单的自举而不需要依赖太多的不可移植工具。

### 现代编程语言特性支持

FreeBASIC作为一种高级编程语言，支持面向过程、面向对象和元编程。

### 调试支持

完全支持GDB（GNU 调试器），数组越界检查（只有使用 -exx 命令行选项），空指针检查（同上）。

### 图形界面支持

该项目提供了与常见程序库的简单的绑定，比如：C 运行时库、Allegro、SDL、OpenGL、GTK+、Windows API等，同时也提供了一些示例程序。

它使用GNU Binutils软件开发工具作为后端，除了动态和静态库，还可以制作控制台和图形／GUI可执行文件。FreeBASIC完全支持C库和部分C++库。这使得程序员可以使用和创建C和许多其他语言的库。

FreeBASIC还不是一个优化编译器，但是它的速度被认为接近主流工具，如GCC。

语法
--

FreeBASIC语法试图尽量保持接近BASIC语法，特别是QuickBASIC。虽然语法上试图保持与其前辈一致，FreeBASIC还是遵循了一些现代的标准和编码实现。具有标准的过程特性以及面向对象特性，如对象、运算符重载、函数重载和命名空间等等，已经被加入到FreeBASIC中。

FreeBASIC的行在遇到行尾字符或冒号时结束。因此不需要使用特殊字符（如C语言中的分号）来通知编译器此行结束。多条语句可以通过冒号`:`分割写在一行里。

FreeBASIC支持块注释和行尾注释。整行注释使用一个撇号`'`，块注释从`/'`开始，到`'/`结束。

### 兼容性

FreeBASIC继承自QuickBASIC。为了使FreeBASIC与现代的工具兼容并且具有高级编程特性，在开发FreeBASIC的时候还是进行了一些修改的。而*-lang*选项的设置使得FreeBASIC编译器也能够适应GCC和QuickBASIC兼容语言。

* 当选择FB语言设置时（命令行参数为*-lang fb*），将开启所有的FreeBASIC新特性，并且不允许使用QuickBASIC的"hackish"特性（该特性不符合现代编程实践）。

* FB-Lite语言设置（*-lang fblite*）提供了访问大多数FreeBASIC中新的非面向对象的特性，但是允许使用与老版本BASIC类似的代码风格。语法规则，如允许隐变量、后缀、`GOSUB` / `RETURN`、行号等等。

* QB语言设置（*-lang qb*）与*-lang fblite*类似，但是它更专注于复制QBASIC式的行为。*-lang qb*被设计用来使为QBASIC写的程序能够更容易地运行，在有的情况下*-lang fblite*的兼容性不够好，这时*-lang qb*就会很有用。

### 示例代码

和QBasic一样，在屏幕上写入一行文本的程序可以写成如下的简单语句：

```
Print "Hello, World!"
Sleep
```

而且也加入一些面向对象的性质，例如动态连接库，运算符重载，以下是面向对象的例子代码：

```
/'A Vector motion class'/
Type Vector
	W as Integer
	H as Integer
	Declare Constructor (nW as Integer, nH as Integer)
End Type
 
Constructor Vector (nW as Integer, nH as Integer)
	W = nW
	H = nH
End Constructor
 
/'Create an object class'/
Type Object
	Private:
		X as Integer
		Y as Integer
		Movement as Vector Pointer
	Public:
		/'Create public methods, including a destructor for automated cleanup'/
		Declare Constructor (nX as Integer, nY as Integer)
		Declare Destructor ()
		Declare Sub SetMotion (Motion as Vector Pointer)
		Declare Sub Move ()
		Declare Property GetX as Integer
End Type
 
/'Set initial coordinates'/
Constructor Object (nX as Integer, nY as Integer)
	X = nX
	Y = nY
End Constructor
 
/'Clean up allocated memory'/
Destructor Object ()
	delete Movement
End Destructor
 
/'Set the motion Vector'/
Sub Object.SetMotion (Motion as Vector Pointer)
	Movement = Motion
End Sub
 
/'Move the object based on its motion Vector'/
Sub Object.Move ()
	X += Movement->W
	Y += Movement->H
End Sub
 
/'A getter for X, as it's private'/
Property Object.GetX as Integer
	Return X
End Property
 
	/'MAIN CODE'/
 
/'Create a new instance of Object at coordinates 100, 100'/
Dim Player as Object = Type<Object>(100, 100)
 
/'Dynamically allocate a new Vector object
moving left 10 units and down 5'/
Player.SetMotion(new Vector (-10, 5))
 
/'Make the Player update its location'/
Player.Move()
 
/'Display new X, 90'/
Print Player.GetX
 
/'Because Player is a local variable, it's destructor is
called at the end of scope automatically'/
```

图形库
---

FreeBASIC拥有一个内置的2D软件图形库，与QuickBASIC兼容，为用户提供了简单的图形元素（如矩形，线和圆）、位块传输以及一些QuickBASIC的图形库中没有的附加特性。图形库本身并不依赖于操作系统，因此可以跨平台使用。

虽然图形库是内置的，但是只有在选择使用时才会被包含，这可以简单地通过调用FBgfx `SCREEN`命令来实现。通用库（如OpenGL+）为了硬件加速使用API（Windows、Linux等）来创建一个窗口可以不包含FreeBASIC的图形库。

未来的开发
-----

FreeBASIC仍然继续开发，目标是成为一个GCC前端，这将带来许多C++和其他面向对象编程语言中的新特性，高级优化技术，以及可以移植到任何现代系统上的能力。

0.17版中已经加入了面向对象程序设计的类，扩展了基本的数据类型。还有更多的新特性值得期待。

外部链接
----

* FreeBASIC官方网站（页面存档备份，存于）
* FreeBASIC官方文档（页面存档备份，存于）
* FreeBASIC官方论坛
* FreeBASIC 托管在 SourceForge 的页面（页面存档备份，存于）
* FreeBASIC wiki（页面存档备份，存于）

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
BASIC程序设计语言的方言（列表（英语：）） |
| --- |
|  |
| 传统 | 
* Altair BASIC
* Applesoft BASIC
* Atari BASIC（英语：）
* Atari Microsoft BASIC（英语：）
* Atari ST BASIC（英语：）
* BASICA（英语：）
* BASIC A+（英语：）
* BASIC Programming（英语：）
* BASIC XE（英语：）
* BASIC XL（英语：）
* Casio BASIC（英语：）
* Chipmunk Basic（英语：）
* Color BASIC（英语：）
* Commodore BASIC（英语：）
* Extended Color BASIC（英语：）
* Dartmouth BASIC（英语：）
* Disk Extended Color BASIC（英语：）
* Family BASIC（英语：）
* GFA BASIC（英语：）
* GW-BASIC
* HP BASIC for OpenVMS（英语：）
* HP Time-Shared BASIC（英语：）
* IBM BASIC（英语：）
* Integer BASIC
* Locomotive BASIC（英语：）
* Mallard BASIC（英语：）
* Microsoft BASIC
* MSX BASIC（英语：）
* Pure Basic
* Rocky Mountain BASIC（英语：）
* S'-BASIC（英语：）
* ScriptBasic（英语：）
* Sinclair BASIC（英语：）
* Southampton BASIC System（英语：）
* STOS BASIC（英语：）
* TI BASIC (TI 99/4A)（英语：）
* TI-BASIC（计算器）
* TI Extended BASIC（英语：）（又名XBasic）
* Tiny BASIC（英语：）
* Turbo-Basic XL（英语：）
* Tymshare SUPER BASIC（英语：）
* UBASIC（英语：）
* Vilnius BASIC（英语：）
* XBasic（英语：）
* ETBASIC

 |
|  |
|  | 
* AmigaBASIC（英语：）
* AMOS BASIC（英语：）
* ASIC（英语：）
* BBC BASIC（英语：）
* Beta BASIC（英语：）
* DarkBASIC
* FreeBASIC
* FutureBASIC（英语：）
* GFA BASIC（英语：）
* GLBasic（英语：）
* Liberty BASIC（英语：）
* Microsoft Small Basic
* PowerBASIC
* PureBasic
* QBasic
* QB64（英语：）
* QuickBASIC
* SmallBASIC（英语：）
* SuperBASIC（英语：）
* ThinBasic（英语：）
* True BASIC
* PowerBASIC
* XBasic（英语：）
* Xblite（英语：）
* Basic4ppc（英语：）
* Visual Test（英语：）
* B4J（英语：）

 |
|  |
|  | 
* AutoIt
* Basic For Qt（英语：）（KBasic）
* BlitzMax
* Chipmunk Basic（英语：）
* FreeBASIC
* Gambas
* GLBasic（英语：）
* Monkey X（英语：）
* OpenOffice Basic（英语：）
* PowerBASIC
* ProvideX（英语：）
* RapidQ（英语：）
* REALbasic
* Run BASIC（英语：）
* Visual Basic
* Visual Basic .NET
* Xojo

 |
|  |
| 用于移动设备 | 
* Basic4android（英语：） (B4A)（英语：）
* Basic4ppc（英语：）
* GLBasic（英语：）
* NS Basic（英语：）
* Basic4ios（英语：） (B4i)（英语：）

 |
|  |
| 微软 | 
* Microsoft BASIC
	+ MBASIC（英语：）
	+ IBM BASIC（英语：）/BASICA
	+ GW-BASIC
	+ QuickBASIC
	+ QBasic
* VBScript
* Visual Basic
* VBA
* Visual Basic .NET
* Embedded Visual Basic（英语：）
* VB 5 for Microsoft Excel 5.0
	+ VSTO（英语：）
	+ VSTA（英语：）
* WordBASIC（英语：）
* TRS-80 Basics (Level I, Level II, Level III)
* Microsoft Small Basic

 |
|  |
| 第三方类VB | 
* Basic For Qt（英语：）
* Gambas
* Hummingbird Basic
* LotusScript（英语：）
* WinWrapBasic（英语：）
* Xojo

 |

 |