QBasic vs GW-BASIC
One good thing about GW-BASIC is that it is very, very simple and is
an excellent tool for teaching programming to a complete beginner.
It's very, very simple. The problem is that it lacks virtually all
features of a modern language, making it a poor choice for any long
term programming needs.
QBasic, while also very simple, does not provide many of the features
you'll find in modern languages. For that reason, I highly recommend QBasic over GW-BASIC.
This page documents the differences between the two languages,
clarifying the advantages of using QBasic.
You may also want to read these articles from the Microsoft Knowledge
Base on
feature
and behavior,
differences between QBasic and GW-BASIC.
Behavioral Differences
Some keywords, though supported by both QBasic and GW-Basic, do not
behave the same in both languages. Here are the differences.
- BSAVE, BLOAD
QBasic does not support the cassette device with
BSAVE and BLOAD, and memory locations may be different.
- CALL ABSOLUTE
Assembly language programs invoked from BASICA
that have string arguments must be revised for
QBasic because QBasic string descriptors are 4
bytes long. The 4 bytes are the low byte and high
byte of the string length followed by the low
byte and high byte of the string address.
- CHAIN
QBasic does not allow you to specify a line
number with CHAIN and does not support the ALL,
MERGE, or DELETE options in BASICA.
- COMMON, DECLARE
QBasic does not allow executable statements to
appear before COMMON and DECLARE statements.
- DEFtype
If BASICA encounters a variable without an
explicit type (indicated by !, #, &, $, or %), it
uses the default type set by the most recent
DEFtype statement. For example, the type of the
variable IFLAG changes from integer to single
precision in the following BASICA code fragment:
10 DEFINT I
20 PRINT IFLAG
30 DEFSNG I
40 GOTO 20
In QBasic, a variable's type cannot be changed
after it appears in a program.
- DIM
All arrays in BASICA are dynamic because BASICA
always allocates array storage while a program
runs. In QBasic, DIM can declare either a static
or dynamic array.
- DRAW, PLAY
DRAW and PLAY statements in BASICA that use
variables or other command strings within command
strings must be modified for QBasic. Use the
VARPTR$ function, which returns a string
representation of the variable's address:
BASICA Statement QBasic Equivalent
---------------- -----------------
DRAW "Xcmdstring$" DRAW "X" + VARPTR$ (cmdstring$)
DRAW "TA = angle" DRAW "TA =" + VARPTR$(angle)
- EOF
When you direct input from a file to a BASICA
program, EOF(0) returns true at the end of the
input file. In QBasic, EOF(0) returns true after
the next record is read past the end of the input
file. For example, the following program runs in
BASICA, but generates an "Input past end of file"
error message in QBasic:
5 WHILE NOT EOF(0)
10 LINE INPUT ; A$
15 WEND
- FIELD
When a random-access file is closed in BASICA
with a CLOSE or RESET statement, field variables
retain the last value assigned to them by a GET
statement. In QBasic, all field variables are
reset to null strings.
|