FreeBASIC问题:
FreeBASIC入门问题
高级FreeBASIC
也可以看看
FreeBASIC的问题
什么是FreeBASIC?
FreeBASIC是Windows 32位,32位保护模式DOS(COFF可执行文件,如DJGPP)和Linux(x86)的32位BASIC编译器。它开始尝试创建与Microsoft QuickBASIC的代码兼容,免费的替代方案,但是迅速发展成为一个强大的开发工具,已经包括对Allegro,SDL,OpenGL等许多其他库的默认安装。
除了具有与QuickBASIC大部分兼容的语法之外,FreeBASIC为老化语言引入了几个新功能,包括变量和函数的指针以及无符号数据类型。
FreeBASIC编译器是自主托管 - 在FreeBASIC中编写的,但是这些库是用C编写的。
回到顶部
谁负责FreeBASIC?
FreeBASIC的第一个版本是由V1ctor完全开发的。后来的版本获得了许多人的贡献,包括开发Linux端口和图形库的Lillo,以及开发DOS端口的DrV。
请参阅
FreeBASIC积分页面。
回到顶部
为什么要使用FreeBASIC而不是QBasic?
FreeBASIC具有优于QBasic,QuickBASIC,PDS和Visual Basic for DOS的无数优点。
- 它支持32位处理器,其中QBasic是为16位CPU设计的。
- 它支持现代操作系统。它具有Windows,Linux和32位DOS的端口。
- 它支持现代API,如SDL,DirectX,Win32和OpenGL。
- 它是根据GPL分发的,这意味着与大多数QuickBASIC /其他BASIC的副本不同,它是免费和合法的。
- 图书馆在LGPL下分发,除了额外的例外,这意味着您可以随意编辑程序,包括销售它们。
- FreeBASIC比QuickBASIC /其他BASIC快多倍。
- FreeBASIC支持许多功能,例如在QuickBASIC /其他BASIC中不可用的指针和内联程序集。
- QuickBASIC只支持DOS。Windows支持DOS仿真(因此QuickBASIC)每个新版本都变得越来越薄。Vista不支持DOS应用程序的图形或全屏文本。
回到顶部
为什么要使用FreeBASIC而不是其他较新的BASIC?
FreeBASIC具有许多特性,使其比大多数其他BASIC语言实现更为理想:
- FreeBASIC遵守标准的BASIC语法,使其更易于使用。
- FreeBASIC被编译成实际的程序(可执行文件)而不是字节码。
- FreeBASIC拥有一个积极参与FreeBASIC开发的大型专业社区。
- FreeBASIC利用访问通用C库的标准方法。例如,SDL是标准的C SDL,而不是一组新的固有命令。
- FreeBASIC具有Windows,Linux和32位DOS的端口。它在三个端口之间保留一致的语法。
回到顶部
FreeBASIC有多快?
大多数测试由社区运行,显示FreeBASIC比QuickBASIC明显快于大多数其他GPL或商业BASIC,并且通常在速度方面接近GCC。
FreeBASIC for Linux的独立测试团队
计算机语言基准游戏的速度比GNU g ++慢1.8倍。测试是关于控制台程序中的计算,内存和磁盘访问速度,没有测试图形功能。考虑到FreeBASIC还不是一个优化的编译器,这不是一个糟糕的结果。
一个显着的速度不足的领域是32位控制台模式。虽然FreeBASIC与其他32位控制台模式应用程序保持一致,但32位控制台模式操作比16位控制台操作要慢得多,如QuickBASIC所示。在DOS版本中,从16位BASIC移植到FB后,一些I / O操作可能会减慢 - 优化代码带来速度。
回到顶部
FreeBASIC与QuickBASIC的兼容性如何?
内置图形库的FreeBASIC模拟了最常用的QB图形模式(模式7,12,13),并实现了QB中所有的绘图图元。
大多数兼容性问题是由于在旧的QB程序中使用了8086-DOS硬件特定的低级技术。VGA端口编程,DOS中断,内存段切换,使用PC扬声器的POS中断或音乐播放都不直接支持,即使它们可以被外部库支持/仿真。
移植旧的QB程序的其他问题,如与新的FB关键字的变量名冲突,具有QB关键字名称的变量和类型后缀,FB中的默认整数大小为32位,通过运行FreeBASIC命令行开关{989796006 }.
见
FreeBASIC和QuickBASIC之间的区别.
回到顶部
FreeBASIC与Windows兼容? DOS? Linux呢?
FreeBASIC与Windows,MS-DOS,FreeDOS和Linux完全兼容。然而,在计划为所有三个平台创建程序时,请注意使用OpenGL的代码,例如,在Windows和Linux中可以使用代码,但不会在DOS中使用,因为OpenGL不适用于DOS。
回到顶部
FreeBASIC是否支持面向对象编程?
FreeBASIC(自0.90版本)支持具有成员函数(方法),静态方法,静态成员变量,构造函数,析构函数,属性,运算符重载,单继承,虚拟和抽象方法(多态)和运行时类型的类(用户定义类型)时间类型信息。关于OOP功能的未来计划包括添加对多继承和/或接口的支持。有关详细信息,请参阅:
作为对象的类型初学者指南.
回到顶部
FB / ToDo列表的未来计划是什么?
回到顶部
我可以在FB中编程GUI应用程序吗?
是的你可以。允许您调用Windows和Linux的GUI API的标题随附各自的版本,但以这种方式进行的程序不可移植。
有一些API包装器和实验性RAD应用程序为Windows创建非便携式GUI代码。
对于便携式编程,可以使用多平台GUI封装库作为GTK或wx-Widgets。GTK头部随FB提供,但FB当前可用的OOP功能阻止使用wx-Widgets。使用这些库创建的程序可能需要用户在其系统中安装包装库。
对于游戏和小型图形应用程序,有一些特定于FB的库可以绘制和管理简单的控件,如图形屏幕中的按钮和编辑框,使用这些库编写的程序完全可移植。
回到顶部
FB适合复杂/大应用吗?
FB编译器是自主托管,它在FB中编程。这意味着当前有超过12万行的代码,相当复杂的应用程序。
回到顶部
我可以在FreeBASIC应用程序中使用非拉丁字符集吗?
FreeBASIC具有由给定平台的C运行时库提供的Unicode支持。这意味着FB DOS将无法帮助您使用Unicode。在其他平台上,您可以使用
Wstrings来支持您需要的任何字符集。File OPEN关键字有一个额外的
编码参数,允许不同的编码。由于FreeBASIC在FB中编码,这意味着您可以在Unicode编辑器中对源进行编码,以使注释和字符串文字可以在任何字符集中(变量和过程的关键字,标签和名称必须保留在ASCII集合中) )。
对于输出屏幕,支持不同于控制台到图形。在控制台模式下,如果控制台字体支持,则支持非拉丁字符集中的wstring打印。图形模式使用内部CP437字符集(旧DOS字符集)字体,因此非拉丁输出需要自定义的栅格字体和使用
绘制字符串关键字。存在第三方工具来获取外部字体并将其转换为DRAW STRING格式。
回到顶部
可以在FB中使用串行/ COM和硬件/ CPU端口吗?
回到顶部
FreeBASIC入门问题
在哪里可以找到有关FreeBASIC的更多信息?
回到顶部
为什么我启动FreeBASIC时QB GUI不会打开?
QB有一个集成开发环境(IDE)。FreeBASIC没有。
FreeBASIC只是一个编译器,而不是一个完整的QuickBASIC克隆。它是一个控制台模式应用程序。它将在命令行中接受一个BAS文件,并且吐出一个EXE文件。
您可以使用OS(记事本,EDIT,nano,...)中最简单的纯文本编辑器创建BAS文件,然后运行编译器。
如果您无法使用语法着色,错误突出显示,多个文件管理,集成调试器,上下文帮助或其他功能,则需要一个IDE。有关IDE和编辑器的信息,请参阅
操作系统特定常见问题.
回到顶部
我可以使用离线版本的文档吗?
回到顶部
FB方言背后有什么想法?
这个想法是允许改进语言,同时保持与QB代码的向后兼容性。QB语法的奇怪性与OOP所需的更加刚性的样式不兼容。新的FB关键字在旧的QB程序中经常与变量名冲突。QB允许在变量名称和程序中使用自由点,而不是UDT。
三个方言(-lang fb,-lang qb,-lang fblite)允许结合两个世界中最好的。
- lang fb提供了OOP编程所需的框架。其他方言不能访问OOP。
- lang qb将允许开发人员不断增加与qb程序的兼容性。FB中的较新关键字可以使用两个下划线。例如,Getmouse可以使用__Getmouse
- lang fblite提供FreeBASIC语言兼容性,具有更多与QBASIC兼容的编码风格。
回到顶部
当我定义大于xx的数组时,为什么我的程序崩溃?
这通常是因为您使
automatic 固定长度的数组太大,并且它正在破坏程序堆栈。你有几个选择:
- 如果可能,减小automatic 数组的大小
- 创建一个可变长度的数组
- 在编译时使用-t命令行选项为程序堆栈保留更多内存。默认值为-t 1024(千字节)。注意:这里使用非常大的值是一个坏主意。
- 通过使用Static而不是Dim定义数组来创建static 数组(仅在本地可见但全局保留)
- 使用Dim定义具有Shared访问的数组(这使得数组完全全局)
- 使用指针和内存功能,如Allocate和Deallocate自己管理内存 - 这是存储大型缓冲区的首选方式,但不适用于初学者。
Static 和
variable-length 数组不使用程序堆栈的元素数据,因此不要与
automatic 固定长度数组相关联的问题。有关详细信息,请参阅
存储类.请注意,将巨大的缓冲区存储为
static 或增加堆栈大小远远高于默认值,这不是一个好主意,因为它增加了加载和启动程序所需的固定内存量,即使大部分时间未被使用,并可能导致性能下降,甚至拒绝程序加载。
为什么我的程序无法使用“找不到-llibname”的消息进行编译?
这是链接器引发的错误。该程序应该链接到程序代码中指定的外部库(
#inclib)或编译器命令行
-l.但是,链接器无法在任何库路径中找到匹配的文件。检查您要编译的库的主页,以了解如何下载它,或检查ExtLibTOC以查看是否可以在那里找到有关该库的信息。
回到顶部
高级FreeBASIC
如何链接到C库?
C库在FreeBASIC中的设置方式大致相同,它们位于C.FreeBASIC附带的每个库都有一个名为“
library name .bi”的基本包含文件,它使用
#inclib编译器语句来包含库,而
声明声明可以在库中声明这些函数。FreeBASIC包含数百个BI文件,请参阅库标题的完整列表
这里.
回到顶部
我可以使用调试器吗?
FreeBASIC可以使用与GNU GDB兼容的调试器。
- Win32:Insight是一个用户友好的GDB包装,请参阅Win32相关常见问题.
- DOS:警告DOS还有一个名为“Insight”的产品,但它是一个真正的模式调试器,不能与FreeBASIC一起使用,至少使用GDB或一些DPMI32调试器。
- Linux:使用GDB。
回到顶部
FB附带的AR.EXE,AS.EXE和LD.EXE文件的目的是什么?
AS.EXE是GAS,“GNU汇编器”。它总是参与编译。LD.EXE是“GNU链接器”,涉及创建可执行文件。AR.EXE是“GNU归档器”,实际上是图书馆员,创建.A图书馆。
回到顶部
我的源文件可以有多大限制?
是的,因为FreeBASIC是一个完全32位的编译器,它可能在源文件上运行,理论上可以是4GB或4294967296字节,但是你的RAM容量应该大大高于你的源代码,否则编译将不会完成至少缓慢
回到顶部
我可以在FreeBASIC中编写一个操作系统吗?
是和否如果你真的坚持写一个操作系统并涉及FB,答案是YES。如果问题是,如果一个初学者,如果你现在开始使用FB开始编写一个操作系统,那么你是不是一个好主意,答案是否定的。有几个陷阱适用:
- 操作系统开发很困难,请参阅http://www.osdev.org/wiki/Getting_Started。
- FB不会帮助你绕过需要处理汇编,也可能几乎不可能避免。
- 您将无法使用大部分受信任的FB功能,如图形,文件I / O,线程,内存管理,甚至控制台I / O ...只是控制流程,数学和逻辑。如果您需要这些库函数,则必须重新实现.
FreeBASIC依赖于GCC,并且有关在C中开发操作系统的可用信息也适用于FreeBASIC。FB将不会更多地帮助你,而不是GCC。
回到顶部
我正在开发一个操作系统,可以将FreeBASIC移植到我的操作系统吗?
依靠。如果您的操作系统至少通过DPMI32(控制台I / O(寻找,多个文件打开,...),文件I / O,内存管理)来实现DOS的功能,
和具有GCC端口,则答案为是。如果您至少有一个符合条件的C编译器(989796239)库,那么这可能是可能的。您不能将FB例如合理地连接到允许仅在一个块中加载或保存文件的操作系统,或16位操作系统。
回到顶部
FreeBASIC是否支持从函数返回引用,像在C ++中?
是的,自0.90.0版本起就存在此函数。现在可以使用
ByRef as datatype 返回引用返回类型的引用。
回到顶部
参考