qb45advr.hlp (
Topic list)
Important Notice
The pages on this site contain documentation for very old MS-DOS software,
purely for historical purposes.
If you're looking for up-to-date documentation, particularly for programming,
you should not rely on the information found here, as it will be woefully
out of date.
DIM Statement Details
◄QuickSCREEN► ◄Details► ◄Example► ◄Contents► ◄Index►
──────────────────────────────────────────────────────────────────────────────
DIM Statement Details
Syntax
DIM [SHARED] variable[(subscripts)][AS type]
[,variable[(subscripts)][AS type]...
Argument Description
SHARED The optional SHARED attribute allows all procedures
in a module to share arrays and simple variables. This
differs from the SHARED statement, which affects only
variables within a single SUB or FUNCTION.
variable A BASIC variable name.
subscripts The dimensions of the array. Multiple dimensions can be
declared. The subscript syntax is described below.
AS type Declares variable to be an elementary or user-defined
type. The elementary types are INTEGER, LONG, SINGLE,
DOUBLE, and STRING (variable or fixed).
Subscripts in DIM statements have the following form:
[lower TO] upper [,[lower TO] upper]...
The TO keyword provides a way to indicate both the lower and the upper
bounds of an array's subscripts. The following statements are
equivalent (if there is no OPTION BASE statement):
DIM A(8,3)
DIM A(0 TO 8, 0 TO 3)
DIM A(8,0 TO 3)
With the TO keyword, you are no longer restricted to positive
subscripts. You can use TO to specify any range of subscripts
from -32,768 to 32,767:
DIM A(-4 TO 10)
DIM B(-99 TO -5,-3 TO 0)
If you use an array in your program without including the array in a
DIM statement, the maximum value of each subscript of the array is 10.
If you use a subscript that is greater than the specified maximum, an
error message appears that says "Subscript out of range."
The DIM statement initializes all elements of numeric arrays to zero
and all the elements of string arrays to null strings. The fields of
record variables are initialized to zero, including fixed-string
fields. The maximum number of dimensions allowed in a DIM statement
is 60.
If you try to dimension an array variable with a DIM statement
after you have referred to the array, an error message results that
reads "Array already dimensioned." It is good programming
practice to put the required DIM statements at the beginning
of a program, outside of any loops.
Static and Dynamic Arrays
How you declare an array also determines whether it is $STATIC
(allocated when the program is translated) or $DYNAMIC (allocated
when the program is run).
■ An array declared first in a COMMON statement is $DYNAMIC.
■ Implicitly dimensioned arrays are $STATIC.
■ Arrays dimensioned with numeric constants or CONST statement
constants are $STATIC.
■ Arrays dimensioned with variables as subscripts are $DYNAMIC.
The following list shows the different combinations and results:
Statement Result
DIM A(0 TO 9) The array A is allocated as a $STATIC array if
$DYNAMIC is not in effect.
DIM A(MAXDIM) If MAXDIM is defined in a CONST statement A is a
$STATIC array. If MAXDIM is a variable, then the
array is a $DYNAMIC array and is only allocated
when the program reaches the DIM statement.
Note: If the array size exceeds 64K, if the array is not dynamic,
and if the /AH option was not used, you may get an error message
that reads "Subscript out of range" or one that reads "Array
too big." Reduce the size of the array or make the array dynamic
and use the /AH command-line option.
Type Declarations
In addition to declaring the dimensions of an array, the DIM
statement may also be used to declare the type of a variable. For
example, the following statement declares the variable to be an
integer, even though there is no type declaration character or DEFINT
statement:
DIM NumberOfBytes AS INTEGER
The DIM statement provides a mechanism for declaring specific
variables to be records. In the following example, the variable
TopCard is declared as a record variable:
TYPE Card
Suit AS STRING * 9
Value AS INTEGER
END TYPE
DIM TopCard AS Card
You may also declare arrays of records:
TYPE Card
Suit AS STRING * 9
Value AS INTEGER
END TYPE
DIM Deck(1 TO 52) AS Card
Differences from BASICA
BASICA executes a DIM statement when it encounters the statement in
the program. The array is only allocated when the statement is
executed, so all arrays in BASICA are dynamic.