From QB64 Wiki

Jump to: navigation, search

The DIM statement is used to define a variable or a list of variable types or dimension $STATIC or $DYNAMIC Arrays.


Syntax 1: DIM [SHARED] variable[{suffix| AS type}] [, variable2...]]
Syntax 2: DIM [SHARED] Array(lowest% [TO) highest%])[{suffix| AS type}] [, variable2...]
QB64 Syntax: DIM [SHARED] variable[{suffix| AS [_UNSIGNED] type}] [, variable2...]

  • Sets the INTEGER range of elements(indices) of a STATIC array. If only one number is used, the lowest boundary is 0.
  • When used before an array is dimensioned, OPTION BASE 1 can set the array's default lower boundary to 1.
  • DIM SHARED shares variable values with sub-procedures without passing the value in a parameter.
  • Uses the AS keyword to define a variable or array type AS...
    • INTEGER or use variable suffix %
    • LONG or use variable suffix &
    • SINGLE or use variable suffix ! or no suffix by default
    • DOUBLE or use variable suffix #
    • STRING or use variable suffix $. An AS multiplier can set the string length. EX: DIM variable AS STRING * 8
  • QB64 variable types:
    • _BIT or use variable suffix `. An AS multiplier can be used for multiple bits. EX: DIM variable AS _BIT * 8
    • _BYTE or use variable suffix %%
    • _INTEGER64 or use variable suffix &&
    • _FLOAT or use variable suffix ##
    • _OFFSET or use variable suffix %&
    • DIM AS _MEM only! Does not have a variable type suffix
  • Note: When a variable has not been defined or has no type suffix, the value defaults to SINGLE.
  • When the $DYNAMIC metacommand or REDIM is used, array element sizes are changeable(not $STATIC).
  • Use REDIM instead of DIM to dimension arrays as dynamic without the $DYNAMIC metacommand.
  • Use REDIM _PRESERVE in QB64 to retain previous array values when changing the size of an array.
  • REDIM _PRESERVE cannot change the number of array dimensions! An error will occur!
  • Dynamic arrays MUST be REDIMensioned if ERASE or CLEAR are used as the arrays are completely removed.
  • All numerical variable types except SINGLE, DOUBLE and _FLOAT can be dimensioned as _UNSIGNED(suffix ~) or positive only.
  • NOTE: Many Qbasic keyword variable names CAN be used with a STRING suffix($) ONLY! You CANNOT use them without the suffix, use a numerical suffix or use DIM, REDIM, _DEFINE, BYVAL or TYPE variable AS statements!
  • Warning! Do not use negative array Upper bound index values as OS access or "Out of Memory" errors will occur!

Example 1: Defines Qt variable as a one byte fixed length string.


Example 2: Dimensions and types an array.

DIM Image(2000) AS INTEGER

Example 3: Dimensions array with an INTEGER type suffix.

DIM Image%(2000)

Example 4: Dimensions a range of array elements as SHARED integers.


Example 5: Dimensions variable as an array of 8 elements of the type UNSIGNED BIT.


Example 6: QB64 is more flexible than Qbasic when it comes to "Duplicate Definition" errors. The following code does not error:

x = 1 'x is a SINGLE variable PRINT x DIM x AS LONG PRINT x

Explanation: The SINGLE variable can be differentiated from the LONG x variable by using suffixes like x! or x& in later code.

Example 7: The following code will create a "Name already in use" status error in QB64 when the variable types are the same.

x = 1 'x is a SINGLE variable PRINT x DIM x AS SINGLE PRINT x

Explanation: QB64 gives an error because the creation of the new variable would make referring to the existing one impossible.

See also:

Go to Keyword Reference - Alphabetical
Go to Keyword Reference - By usage
Go to Main WIKI Page
Personal tools