Frequently Asked Questions
 


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列表的未来计划是什么?

您可以直接查看FBC的todo.txt了解未来版本的计划。

回到顶部

我可以在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端口吗?
是的,FB内置了访问串行/ COM端口和硬件/ CPU端口的功能,无需外部库。有关操作系统的详细信息,请参阅操作系统特定常见问题打开ComINP退房.

回到顶部

FreeBASIC入门问题


在哪里可以找到有关FreeBASIC的更多信息?
FreeBASIC Wiki是使用FreeBASIC(989796166)的最新手册。

官方的之外的活动FreeBASIC相关论坛可在qbasicnews皮特的QB网站FB游戏目录freebasic-portal.de(德文)找到。

经常有FreeBASIC相关文章的活跃杂志是QB快递QBXL杂志.这些杂志一直在寻找新的文章,所以如果你认为你有一个关于FreeBASIC的文章的好主意,请提交!

回到顶部

为什么我启动FreeBASIC时QB GUI不会打开?
QB有一个集成开发环境(IDE)。FreeBASIC没有。
FreeBASIC只是一个编译器,而不是一个完整的QuickBASIC克隆。它是一个控制台模式应用程序。它将在命令行中接受一个BAS文件,并且吐出一个EXE文件。
您可以使用OS(记事本,EDIT,nano,...)中最简单的纯文本编辑器创建BAS文件,然后运行编译器。
如果您无法使用语法着色,错误突出显示,多个文件管理,集成调试器,上下文帮助或其他功能,则需要一个IDE。有关IDE和编辑器的信息,请参阅操作系统特定常见问题.

回到顶部

我可以使用离线版本的文档吗?
这个在线维基是FB的官方文档。通常它是最新的在FB的开发版本中发现的最新改进。
该维基的离线版本(CHM,HTML和其他格式)可从SourceForge上的fbc下载站点的文档目录获取。

回到顶部

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 数组的大小
  • 创建一个可变长度的数组
    • 使用空的下标列表定义数组(使用Dim)或
    • 使用可变下标代替数字文字常量枚举(使用Dim)定义数组,或
    • 使用ReDim定义数组
  • 在编译时使用-t命令行选项为程序堆栈保留更多内存。默认值为-t 1024(千字节)。注意:这里使用非常大的值是一个坏主意。
  • 通过使用Static而不是Dim定义数组来创建static 数组(仅在本地可见但全局保留)
  • 使用Dim定义具有Shared访问的数组(这使得数组完全全局)
  • 使用指针内存功能,如AllocateDeallocate自己管理内存 - 这是存储大型缓冲区的首选方式,但不适用于初学者。

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 返回引用返回类型的引用。

回到顶部

参考