2

GW-BASIC 和许多其他旧的 BASIC 方言(如 C64 BASIC)允许您执行以下操作:

20 PRINT "World"
10 PRINT "Hello"

这将在RUN执行命令/语句时产生以下输出:

Hello
World

命令/语句将LIST列出程序:

10 PRINT "Hello"
20 PRINT "World"

换句话说,这些 BASIC 方言将自动重新排序执行以符合您使用的行号指定的顺序,而不管您最初在另一个编辑器中键入/保存它们的顺序(例如 EDLIN.EXE)。但是,QuickBASIC 和 BASCOM2 未能做到这一点。

我可以在网上找到的最古老的 QuickBASIC 版本是 QuickBASIC 2.0,它在那里不起作用,只是忽略了行号以按我写的顺序打印它们(即“World Hello”)。

BASCOM2——我能找到的最古老的 MS/IBM BASIC 编译器——显然也不支持该功能,而是因错误而失败(SQ = 乱序?):

 0046   0006    10 PRINT "Hello"
                ^ SQ

50434 Bytes Available
50325 Bytes Free

    0 Warning Error(s)
    1 Severe  Error(s)

虽然我当然知道行号是多余的,但支持以显式行号顺序(20、10、30 => 10、20、30)而不是隐式行号顺序(20、10、 30 => 20、10、30)。

有人知道为什么这种传统的 BASIC 行为被忽略了吗?

4

1 回答 1

3

我很惊讶您发现的第一个 bascom 报告了错误。我曾经用于 BASIC 的所有编译器,我相信自 1982 年以来我已经使用了很多编译器,将行号设为可选并支持标签。我记得在我作为一名专业程序员的第一份工作中,我们设计了一个编译器预处理器,它通过用行号和(喘气)GOTO 语句替换内容,只插入正确的 IF、ELSE IF 和 END IF 语句所需的行。

由于 MZ-Tools 插件允许我通过单击按钮向我的方法和函数添加和删除行号,我今天仍然在我仍然支持的 VB6 会计应用程序中使用行号。这使我可以在所有错误例程中使用 Erl(错误行号),还可以快速一键添加到我的所有方法和函数中,这使我可以精确定位任何错误发生的确切行。

我敢肯定编译器设计者认为行号只对解释器有实际用途,也许第一个版本的 bascom 认为你会使用解释器进行开发和测试,然后编译和分发可执行文件,然后也许以后的版本会考虑开发人员正在使用文本编辑器,尤其是他们自己的 IDE 附带的更高版本,谁需要那里的行号?好吧,如果我们想要精确的错误报告,我们会这样做!这是我喜欢 Java 和 Eclipse 的一件事。行号在那里,所以我可以确切地知道错误在哪里,但它们不会像在 BASIC 中那样妨碍(删除行号,添加/删除代码,替换行号)。

于 2018-02-03T01:52:11.697 回答