在GW-BASIC和QuickBASIC中,语句都是传递的参数,其中一些是可选的,根据该语句可以省略:
REM Move the text cursor to the specified column and row.
LOCATE row%, column%
REM Move the text cursor to the specified column without changing the row.
LOCATE , column%
在GW-BASIC中,
CLEAR
语句非常不寻常,因为它的第一个“参数”始终被省略:CLEAR , basicMem
CLEAR , basicMem, basicStack
CLEAR , , basicStack
在QuickBASIC中,由于解释器/运行时管理其自己的内存,因此
basicMem
参数成为可选参数:CLEAR , , basicStack
我想知道的是,第一个“参数”是否曾用于GW-BASIC之前的任何东西,即实际上是否有用:
CLEAR missingArg, basicMem, basicStack
REM ^^^^^^^^^^
REM here
也就是说,在第一个逗号之前是否存在有目的的非空论证?
如果有人有任何想法,我很想知道!
最佳答案
是的,有第一个参数,但是从来没有真正使用它的三参数形式。
Microsoft(最初是Micro-Soft)创建了Altair BASIC。它具有一个CLEAR
命令,该命令不带将所有程序变量都设置为零的参数。 4K版本没有字符串,因此不需要管理字符串空间。但是,8K,Extended和Disk版本具有CLEAR
命令,该命令也接受CLEAR x
形式的单个参数。值x
指定最大的可用字符串空间量(以字节为单位),在BASIC加载时,默认值在8K版本中为50字节,在扩展版和磁盘版本中为200字节,直到更改[source]为止。那就是缺少的第一个参数的来源以及它最初的用途。但是,当时只有一个论点是有效的。
微软继续为多种系统开发了一个名为“BASIC-80”的派生产品,特别是英特尔ISIS-II,CP/M和TEKDOS操作系统。还创建了BASIC-80的“独立磁盘BASIC”版本,该版本可以在“几乎任何没有操作系统的基于8080或Z80的磁盘硬件上运行”。没有4K版本的BASIC-80,因此可以合理地假设所有版本的BASIC-80都具有与Altair BASIC的8K版本相同的字符串。结果,需要管理该字符串空间。但是,a second argument was added是在BASIC-80中:
CLEAR [expression![,address]]
expression!
是一个指定字符串空间量的表达式,例如在8K(Altair)BASIC中,而address
是BASIC可用的最大地址,即BASIC可用的内存量,例如GW-中第一个逗号之后的参数。基本的。最终,BASIC-80版本5.0被发布到世界上,并且it featured the odd syntax instead:
CLEAR [,[expression1][,expression2]]
expression1
是BASIC可用的最大内存,而expression2
是堆栈空间。 Appendix A: New Features in BASIC-80, Release 5.0解释了为什么删除第一个参数的原因:换句话说,
CLEAR strSpace!,maxMem
将忽略BASIC-80版本5.0中的strSpace!
参数,因此语法变为CLEAR [,[maxMem][,maxStack]]
。QuickBASIC最终将语法进一步更改为
CLEAR [,,stack]
。令人困惑的是,QuickBASIC 4.5的在线帮助系统指出以下内容:
Note: Two commas are used before stack to keep QuickBASIC compatible
with BASICA. BASICA included an additional argument that set the
size of the data segment. Because QuickBASIC automatically manages
the data segment, the first parameter is no longer required.
提到的“第一个参数”是
maxMem
,因为BASICA(和GW-BASIC)使用了BASIC-80,5.0版中可用的语法,而不是BASIC-80的5.0之前版本中使用的同样缺少的strSpace!
参数。关于qbasic - CLEAR语句是否有第一个参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53680260/