显式行号和执行顺序

时间:2018-02-03 01:33:09

标签: basic qbasic gw-basic

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行为?

1 个答案:

答案 0 :(得分:3)

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

我仍然在我仍然支持的VB6会计应用程序中使用行号,这要归功于MZ-Tools加载项,它允许我通过单击按钮添加和删除行号以及我的方法和功能。这允许我在我的所有错误例程中使用Erl(错误行号),也可以快速一键添加到我的所有方法和函数,这允许我精确定位发生错误的行。

我确信编译器设计人员认为行号仅对解释器有用,也许第一个版本的bascom认为你用解释器开发和测试,然后编译和分发可执行文件,然后可能在以后版本计算开发人员正在使用文本编辑器,尤其是随自己的IDE一起提供的后续版本以及谁需要行号?好吧,如果我们想要精确的错误报告,我们会做这是我喜欢Java和Eclipse的一件事。行号是有的,所以我可以确切地知道错误的位置,但它们不会像在BASIC中那样(删除行号,添加/删除代码,替换行号)。