Microsoft KB Archive/63270

= QB & QBX Insert Default REM $STATIC Before a SUB or FUNCTION =

Article ID: 63270

Article Last Modified on 11/21/2006

-

APPLIES TO


 * Microsoft QuickBasic 4.0
 * Microsoft QuickBASIC 4.0b
 * Microsoft QuickBasic 4.5 for MS-DOS
 * Microsoft BASIC Professional Development System 7.0
 * Microsoft BASIC Professional Development System 7.1

-



This article was previously published under Q63270



SUMMARY
The QB.EXE and QBX.EXE editors automatically insert an invisible REM $STATIC metacommand before the first SUB or FUNCTION procedure if you have a REM $DYNAMIC in effect in a module-level (main program level) window. This REM $STATIC is visible only when the file is saved as Text and then viewed in other text editors or TYPEd in MS-DOS. This automatic REM $STATIC actually does not affect arrays dimensioned inside the SUB or FUNCTION procedures, as explained further below.

This information applies to the QB.EXE environment that comes with Microsoft QuickBasic versions 4.00, 4.00b, and 4.50 for MS-DOS, and to the QBX.EXE environment that comes with Microsoft Basic Professional Development System (PDS) versions 7.00 and 7.10 for MS-DOS.



MORE INFORMATION
Note that the STATIC clause on a SUB or FUNCTION statement retains the value of local variables between invocations of that procedure. No STATIC clause on the SUB or FUNCTION statement means local variables are not retained between invocations. Do not confuse the STATIC clause of a SUB or FUNCTION statement with the array types of &quot;static&quot; (or $STATIC) or &quot;dynamic&quot; (or $DYNAMIC). These are distinct concepts.

A static (or $STATIC) array is dimensioned at compile time. A dynamic (or $DYNAMIC) array is dimensioned at run time.

The STATIC clause of SUB or FUNCTION statements affects locally dimensioned arrays as follows:


 * 1) SUB or FUNCTION statements with no STATIC clause appended (such as &quot;SUB x&quot;) force all locally dimensioned arrays to be dynamic, and the REM $STATIC metacommand (if any) is ignored.
 * 2) SUB or FUNCTION statements with a STATIC clause (such as &quot;SUB x STATIC&quot;) allow locally dimensioned arrays to be dimensioned dynamically or statically. For example, a REM $DYNAMIC metacommand makes locally dimensioned arrays dynamic in a STATIC SUB. Without using a metacommand, the locally dimensioned arrays will be static (unless dimensioned with a variable in the subscript).

Example 1
If you type the following code example into QB or QBX, save the file as text, and use the TYPE command to display the file in DOS, you will see that QB or QBX inserted a REM $STATIC just before the &quot;SUB sub1&quot; line. This is by design, and doesn't affect any arrays. REM $DYNAMIC CALL sub1 END SUB sub1 PRINT &quot;hello&quot; END SUB

Example 2
When QB or QBX automatically places the REM $STATIC before a SUB or FUNCTION, the REM $STATIC actually does not affect that SUB or FUNCTION.

In the case of a non-STATIC SUB, all locally dimensioned arrays are always $DYNAMIC. For example: CALL sub1 END

REM $STATIC SUB sub1 REM $STATIC ' QB and QBX ignore this. DIM array1(1000) END SUB In the code above, array1 is a $DYNAMIC array. This is because all arrays in non-STATIC SUBs and FUNCTIONs are required to be $DYNAMIC. The REM $STATIC metacommand does not affect arrays in non-STATIC SUBs. QB.EXE, QBX.EXE, and BC.EXE ignore both of the REM $STATIC metacommands in the above example.

The only way to make any array static in a SUB or FUNCTION is to place the STATIC clause on the SUB or FUNCTION statement, as in the following example, where &quot;array1&quot; is static and &quot;array2&quot; is dynamic: CALL sub1 END

SUB sub1 STATIC DIM array1(1000)  ' Array defaults to a static array. z=20 DIM array2(z)  ' A variable in the subscript makes array dynamic. END SUB From these examples, you can see that the REM $STATIC that QB or QBX automatically inserts before the first SUB or FUNCTION can be ignored. It won't affect the arrays dimensioned in the SUB or FUNCTION. You do not need to compensate for it or program around it.

Additional query words: QuickBas BasicCom

Keywords: KB63270

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.